﻿// Accord Unit Tests
// The Accord.NET Framework
// http://accord-framework.net
//
// Copyright © César Souza, 2009-2017
// cesarsouza at gmail.com
//
//    This library is free software; you can redistribute it and/or
//    modify it under the terms of the GNU Lesser General Public
//    License as published by the Free Software Foundation; either
//    version 2.1 of the License, or (at your option) any later version.
//
//    This library is distributed in the hope that it will be useful,
//    but WITHOUT ANY WARRANTY; without even the implied warranty of
//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
//    Lesser General Public License for more details.
//
//    You should have received a copy of the GNU Lesser General Public
//    License along with this library; if not, write to the Free Software
//    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
//

namespace Accord.Tests.Statistics.Models.Fields
{
    using System;
    using Accord.Statistics.Distributions.Multivariate;
    using Accord.Statistics.Models.Fields.Functions;
    using Accord.Statistics.Models.Markov;
    using Accord.Statistics.Models.Markov.Learning;
    using Accord.Statistics.Models.Markov.Topology;
    using NUnit.Framework;
    using Accord.Statistics.Distributions.Fitting;
    using Accord.Statistics.Models.Fields;
    using Accord.Statistics.Models.Fields.Functions.Specialized;
    using Accord.Math;

    [TestFixture]
    public class MultivariateMarkovFunctionTest
    {

        public static HiddenMarkovClassifier<MultivariateNormalDistribution> CreateModel1()
        {
            // Create a Continuous density Hidden Markov Model Sequence Classifier
            // to detect a multivariate sequence and the same sequence backwards.
            double[][][] sequences = new double[][][]
            {
                new double[][] 
                { 
                    // This is the first  sequence with label = 0
                    new double[] { 0 },
                    new double[] { 1 },
                    new double[] { 2 },
                    new double[] { 3 },
                    new double[] { 4 },
                }, 

                new double[][]
                {
                     // This is the second sequence with label = 1
                    new double[] { 4 },
                    new double[] { 3 },
                    new double[] { 2 },
                    new double[] { 1 },
                    new double[] { 0 },
                }
            };

            // Labels for the sequences
            int[] labels = { 0, 1 };

            // Creates a sequence classifier containing 2 hidden Markov Models
            //  with 2 states and an underlying Normal distribution as density.
            MultivariateNormalDistribution density = new MultivariateNormalDistribution(1);
            var classifier = new HiddenMarkovClassifier<MultivariateNormalDistribution>(2, new Ergodic(2), density);

            // Configure the learning algorithms to train the sequence classifier
            var teacher = new HiddenMarkovClassifierLearning<MultivariateNormalDistribution>(classifier,

                // Train each model until the log-likelihood changes less than 0.001
                modelIndex => new BaumWelchLearning<MultivariateNormalDistribution>(classifier.Models[modelIndex])
                {
                    Tolerance = 0.0001,
                    Iterations = 0
                }
            );

            // Train the sequence classifier using the algorithm
            double logLikelihood = teacher.Run(sequences, labels);


            return classifier;
        }

        public static HiddenMarkovClassifier<MultivariateNormalDistribution> CreateModel2()
        {
            // Create a Continuous density Hidden Markov Model Sequence Classifier
            // to detect a multivariate sequence and the same sequence backwards.
            double[][][] sequences = new double[][][]
            {
                new double[][] 
                { 
                    // This is the first  sequence with label = 0
                    new double[] { 0, 1 },
                    new double[] { 1, 2 },
                    new double[] { 2, 3 },
                    new double[] { 3, 4 },
                    new double[] { 4, 5 },
                }, 

                new double[][]
                {
                        // This is the second sequence with label = 1
                    new double[] { 4,  3 },
                    new double[] { 3,  2 },
                    new double[] { 2,  1 },
                    new double[] { 1,  0 },
                    new double[] { 0, -1 },
                }
            };

            // Labels for the sequences
            int[] labels = { 0, 1 };


            var density = new MultivariateNormalDistribution(2);

            // Creates a sequence classifier containing 2 hidden Markov Models with 2 states
            // and an underlying multivariate mixture of Normal distributions as density.
            var classifier = new HiddenMarkovClassifier<MultivariateNormalDistribution>(
                2, new Ergodic(2), density);

            // Configure the learning algorithms to train the sequence classifier
            var teacher = new HiddenMarkovClassifierLearning<MultivariateNormalDistribution>(
                classifier,

                // Train each model until the log-likelihood changes less than 0.0001
                modelIndex => new BaumWelchLearning<MultivariateNormalDistribution>(
                    classifier.Models[modelIndex])
                {
                    Tolerance = 0.0001,
                    Iterations = 0,

                    FittingOptions = new NormalOptions() { Diagonal = true }
                }
            );

            // Train the sequence classifier using the algorithm
            double logLikelihood = teacher.Run(sequences, labels);

            return classifier;
        }

        public static HiddenMarkovClassifier<MultivariateNormalDistribution> CreateModel3(
            int states = 4, bool priors = true)
        {

            MultivariateNormalDistribution density = new MultivariateNormalDistribution(2);

            var classifier = new HiddenMarkovClassifier<MultivariateNormalDistribution>(6,
                new Forward(states), density);

            string[] labels = { "1", "2", "3", "4", "5", "6" };
            for (int i = 0; i < classifier.Models.Length; i++)
                classifier.Models[i].Tag = labels[i];

            // Create the learning algorithm for the ensemble classifier
            var teacher = new HiddenMarkovClassifierLearning<MultivariateNormalDistribution>(classifier,

                // Train each model using the selected convergence criteria
                i => new BaumWelchLearning<MultivariateNormalDistribution>(classifier.Models[i])
                {
                    Tolerance = 0.1,
                    Iterations = 0,

                    FittingOptions = new NormalOptions() { Diagonal = true, Regularization = 1e-10 }
                }
            );

            teacher.Empirical = priors;

            // Run the learning algorithm
            teacher.Run(inputTest, outputTest);

            return classifier;
        }

        [Test]
        public void HiddenMarkovHiddenPotentialFunctionConstructorTest()
        {
            var model = CreateModel1();

            var target = new MarkovMultivariateFunction(model);

            var features = target.Features;
            double[] weights = target.Weights;

            Assert.AreEqual(26, features.Length);
            Assert.AreEqual(26, weights.Length);

            int k = 0;
            for (int c = 0; c < model.Classes; c++)
            {
                Assert.AreEqual(Math.Log(model.Priors[c]), weights[k++]);

                for (int i = 0; i < model[c].States; i++)
                    Assert.AreEqual(model[c].Probabilities[i], weights[k++]);

                for (int i = 0; i < model[c].States; i++)
                    for (int j = 0; j < model[c].States; j++)
                        Assert.AreEqual(model[c].Transitions[i, j], weights[k++]);

                for (int i = 0; i < model[c].States; i++)
                    for (int j = 0; j < model[c].Dimension; j++)
                    {
                        double mean = model[c].Emissions[i].Mean[j];
                        double var = model[c].Emissions[i].Variance[j];

                        double l2ps = System.Math.Log(2 * System.Math.PI * var);

                        Assert.AreEqual(-0.5 * (l2ps + (mean * mean) / var), weights[k++]);
                        Assert.AreEqual(mean / var, weights[k++]);
                        Assert.AreEqual(-1.0 / (2 * var), weights[k++]);
                    }
            }

        }

        [Test]
        public void HiddenMarkovHiddenPotentialFunctionConstructorTest2()
        {
            var model = CreateModel2();

            var target = new MarkovMultivariateFunction(model);

            var features = target.Features;
            double[] weights = target.Weights;

            Assert.AreEqual(38, features.Length);
            Assert.AreEqual(38, weights.Length);

            int k = 0;
            for (int c = 0; c < model.Classes; c++)
            {
                Assert.AreEqual(Math.Log(model.Priors[c]), weights[k++]);

                for (int i = 0; i < model[c].States; i++)
                    Assert.AreEqual(model[c].Probabilities[i], weights[k++]);

                for (int i = 0; i < model[c].States; i++)
                    for (int j = 0; j < model[c].States; j++)
                        Assert.AreEqual(model[c].Transitions[i, j], weights[k++]);

                for (int i = 0; i < model[c].States; i++)
                    for (int j = 0; j < model[c].Dimension; j++)
                    {
                        double mean = model[c].Emissions[i].Mean[j];
                        double var = model[c].Emissions[i].Variance[j];

                        double l2ps = System.Math.Log(2 * System.Math.PI * var);

                        Assert.AreEqual(-0.5 * (l2ps + (mean * mean) / var), weights[k++]);
                        Assert.AreEqual(mean / var, weights[k++]);
                        Assert.AreEqual(-1.0 / (2 * var), weights[k++]);
                    }
            }

        }


        [Test]
        public void ComputeTest()
        {
            var model = CreateModel1();

            var target = new MarkovMultivariateFunction(model);

            double[][] x = { new double[] { 0 }, new double[] { 1 } };


            double actual;
            double expected;



            for (int c = 0; c < model.Classes; c++)
            {
                for (int i = 0; i < model[c].States; i++)
                {
                    // Check initial state transitions
                    expected = model.Priors[c] * Math.Exp(model[c].Probabilities[i]) * model[c].Emissions[i].ProbabilityDensityFunction(x[0]);
                    actual = Math.Exp(target.Factors[c].Compute(-1, i, x, 0, c));
                    Assert.AreEqual(expected, actual, 1e-6);
                    Assert.IsFalse(double.IsNaN(actual));
                }

                for (int t = 1; t < x.Length; t++)
                {
                    // Check normal state transitions
                    for (int i = 0; i < model[c].States; i++)
                    {
                        for (int j = 0; j < model[c].States; j++)
                        {
                            double xb = Math.Exp(model[c].Transitions[i, j]);
                            double xc = model[c].Emissions[j].ProbabilityDensityFunction(x[t]);
                            expected =  xb * xc;
                            actual = Math.Exp(target.Factors[c].Compute(i, j, x, t, c));
                            Assert.AreEqual(expected, actual, 1e-6);
                            Assert.IsFalse(double.IsNaN(actual));
                        }
                    }
                }
            }

        }


        [Test]
        public void ComputeTest2()
        {
            var model = CreateModel2();

            var target = new MarkovMultivariateFunction(model);

            double actual;
            double expected;

            double[][] x = { new double[] { 0, 1 }, new double[] { 3, 2 } };


            for (int c = 0; c < model.Classes; c++)
            {
                for (int i = 0; i < model[c].States; i++)
                {
                    // Check initial state transitions
                    expected = model.Priors[c] * Math.Exp(model[c].Probabilities[i]) * model[c].Emissions[i].ProbabilityDensityFunction(x[0]);
                    actual = Math.Exp(target.Factors[c].Compute(-1, i, x, 0, c));
                    Assert.AreEqual(expected, actual, 1e-6);
                    Assert.IsFalse(double.IsNaN(actual));
                }

                for (int t = 1; t < x.Length; t++)
                {
                    // Check normal state transitions
                    for (int i = 0; i < model[c].States; i++)
                    {
                        for (int j = 0; j < model[c].States; j++)
                        {
                            double xb = Math.Exp(model[c].Transitions[i, j]);
                            double xc = model[c].Emissions[j].ProbabilityDensityFunction(x[t]);
                            expected = xb * xc;
                            actual = Math.Exp(target.Factors[c].Compute(i, j, x, t, c));
                            Assert.AreEqual(expected, actual, 1e-6);
                            Assert.IsFalse(double.IsNaN(actual));
                        }
                    }
                }
            }

        }


        [Test]
        public void ComputeTest3()
        {
            var model = CreateModel3(priors: false);

            var target = new MarkovMultivariateFunction(model, includePriors: false);

            double actual;
            double expected;

            double[][] x = { new double[] { 0, 1 }, new double[] { 3, 2 } };

            for (int c = 0; c < model.Classes; c++)
            {
                for (int i = 0; i < model[c].States; i++)
                {
                    // Check initial state transitions
                    expected = Math.Exp(model[c].Probabilities[i]) * model[c].Emissions[i].ProbabilityDensityFunction(x[0]);
                    actual = Math.Exp(target.Factors[c].Compute(-1, i, x, 0, c));
                    Assert.AreEqual(expected, actual, 1e-6);
                    Assert.IsFalse(double.IsNaN(actual));
                }

                for (int t = 1; t < x.Length; t++)
                {
                    // Check normal state transitions
                    for (int i = 0; i < model[c].States; i++)
                    {
                        for (int j = 0; j < model[c].States; j++)
                        {
                            double xb = Math.Exp(model[c].Transitions[i, j]);
                            double xc = model[c].Emissions[j].ProbabilityDensityFunction(x[t]);
                            expected =  xb * xc;
                            actual = Math.Exp(target.Factors[c].Compute(i, j, x, t, c));
                            Assert.AreEqual(expected, actual, 1e-6);
                            Assert.IsFalse(double.IsNaN(actual));
                        }
                    }
                }
            }

            var hcrf = new HiddenConditionalRandomField<double[]>(target);

            for (int i = 0; i < inputTest.Length; i++)
            {
                int h = model.Compute(inputTest[i]);
                int c = hcrf.Compute(inputTest[i]);
                Assert.AreEqual(h, c);
            }
        }

        [Test]
        public void ComputeTest4()
        {
            var model = CreateModel3();

            var target = new MarkovMultivariateFunction(model);

            double actual;
            double expected;

            double[][] x = { new double[] { 0, 1 }, new double[] { 3, 2 } };


            for (int c = 0; c < model.Classes; c++)
            {
                for (int i = 0; i < model[c].States; i++)
                {
                    // Check initial state transitions
                    expected = model.Priors[c] * Math.Exp(model[c].Probabilities[i]) * model[c].Emissions[i].ProbabilityDensityFunction(x[0]);
                    actual = Math.Exp(target.Factors[c].Compute(-1, i, x, 0, c));
                    Assert.AreEqual(expected, actual, 1e-6);
                    Assert.IsFalse(double.IsNaN(actual));
                }

                for (int t = 1; t < x.Length; t++)
                {
                    // Check normal state transitions
                    for (int i = 0; i < model[c].States; i++)
                    {
                        for (int j = 0; j < model[c].States; j++)
                        {
                            double xb = Math.Exp(model[c].Transitions[i, j]);
                            double xc = model[c].Emissions[j].ProbabilityDensityFunction(x[t]);
                            expected = xb * xc;
                            actual = Math.Exp(target.Factors[c].Compute(i, j, x, t, c));
                            Assert.AreEqual(expected, actual, 1e-6);
                            Assert.IsFalse(double.IsNaN(actual));
                        }
                    }
                }
            }

            var hcrf = new HiddenConditionalRandomField<double[]>(target);

            for (int i = 0; i < inputTest.Length; i++)
            {
                int h = model.Compute(inputTest[i]);
                int c = hcrf.Compute(inputTest[i]);
                Assert.AreEqual(h, c);
            }
        }

        [Test]
        public void ComputeTest5()
        {
            HiddenMarkovClassifier<MultivariateNormalDistribution> model =
                CreateModel3(states: 7);

            var target = new MarkovMultivariateFunction(model);

            double actual;
            double expected;

            double[][] x = { new double[] { 0, 1 }, new double[] { 3, 2 } };

            for (int c = 0; c < model.Classes; c++)
            {
                for (int i = 0; i < model[c].States; i++)
                {
                    // Check initial state transitions
                    expected = model.Priors[c] * Math.Exp(model[c].Probabilities[i]) * model[c].Emissions[i].ProbabilityDensityFunction(x[0]);
                    actual = Math.Exp(target.Factors[c].Compute(-1, i, x, 0, c));
                    Assert.AreEqual(expected, actual, 1e-6);
                    Assert.IsFalse(double.IsNaN(actual));
                }

                for (int t = 1; t < x.Length; t++)
                {
                    // Check normal state transitions
                    for (int i = 0; i < model[c].States; i++)
                    {
                        for (int j = 0; j < model[c].States; j++)
                        {
                            double xb = Math.Exp(model[c].Transitions[i, j]);
                            double xc = model[c].Emissions[j].ProbabilityDensityFunction(x[t]);
                            expected =xb * xc;
                            actual = Math.Exp(target.Factors[c].Compute(i, j, x, t, c));
                            Assert.AreEqual(expected, actual, 1e-6);
                            Assert.IsFalse(double.IsNaN(actual));
                        }
                    }
                }
            }

            var hcrf = new HiddenConditionalRandomField<double[]>(target);

            for (int i = 0; i < inputTest.Length; i++)
            {
                int h = model.Compute(inputTest[i]);
                int c = hcrf.Compute(inputTest[i]);
                Assert.AreEqual(h, c);
            }
        }



        public static double[][][] inputTest =
        {
            #region large test data
            new double[][] {
    new double[] { 12.5, 24 },
    new double[] { 12.75, 23.25 },
    new double[] { 12.75, 22.25 },
    new double[] { 12.75, 21.75 },
    new double[] { 12.75, 21.25 },
    new double[] { 12.75, 20 },
    new double[] { 12.75, 19.75 },
    new double[] { 12.75, 19.25 },
    new double[] { 12.75, 18.5 },
    new double[] { 12.75, 18 },
    new double[] { 12.75, 17.25 },
    new double[] { 12.75, 16.5 },
    new double[] { 12.75, 16.25 },
    new double[] { 12.75, 15.25 },
    new double[] { 12.75, 14.75 },
    new double[] { 12.75, 14.25 },
    new double[] { 12.75, 13.75 },
    new double[] { 12.75, 13 },
    new double[] { 12.75, 12.5 },
    new double[] { 12.75, 11.75 },
    new double[] { 12.75, 11.25 },
    new double[] { 12.75, 10.5 },
    new double[] { 12.75, 10.25 },
    new double[] { 12.75, 10 },
    new double[] { 12.75, 9.25 },
    new double[] { 12.75, 8.5 },
    new double[] { 12.75, 8.25 },
    new double[] { 12.75, 7.75 },
    new double[] { 12.75, 7.5 },
    new double[] { 12.75, 6.75 },
    new double[] { 12.75, 6.75 },
    new double[] { 12.75, 6.25 },
    new double[] { 12.75, 5.75 },
    new double[] { 12.75, 5.5 },
    new double[] { 12.75, 5.25 },
    new double[] { 12.75, 5 },
    new double[] { 12.75, 4.75 },
    new double[] { 12.75, 4.5 },
    new double[] { 12.75, 4 },
    new double[] { 12.75, 3.75 },
    new double[] { 12.75, 3.5 },
    new double[] { 12.75, 3.25 },
    new double[] { 12.75, 3 },
    new double[] { 12.75, 2.75 } 
},
new double[][] {
    new double[] { 17, 25.75 },
    new double[] { 17, 25.25 },
    new double[] { 17, 24.5 },
    new double[] { 17.25, 23.75 },
    new double[] { 17.5, 23 },
    new double[] { 18, 22 },
    new double[] { 18, 21.25 },
    new double[] { 18, 20.25 },
    new double[] { 18, 19.25 },
    new double[] { 18.25, 18 },
    new double[] { 18.25, 17.25 },
    new double[] { 18.25, 16.25 },
    new double[] { 18.75, 15.25 },
    new double[] { 18.75, 14.5 },
    new double[] { 18.75, 13.75 },
    new double[] { 19, 13.25 },
    new double[] { 19, 12.5 },
    new double[] { 19, 12.25 },
    new double[] { 19, 12 },
    new double[] { 19, 11.25 },
    new double[] { 19, 10.75 },
    new double[] { 19, 10.25 },
    new double[] { 19, 9.75 },
    new double[] { 19, 9.5 },
    new double[] { 19, 9.25 },
    new double[] { 19, 8.25 },
    new double[] { 19, 7.75 },
    new double[] { 19, 7.25 },
    new double[] { 19, 6.25 },
    new double[] { 19, 5.75 },
    new double[] { 19, 4 },
    new double[] { 19, 3.25 },
    new double[] { 19, 3 },
    new double[] { 19, 2.5 },
    new double[] { 19, 2.25 },
    new double[] { 19, 2 },
    new double[] { 19, 1.75 },
    new double[] { 19, 1.5 } 
},
new double[][] {
    new double[] { 16, 24.75 },
    new double[] { 16, 24.5 },
    new double[] { 16, 23.5 },
    new double[] { 16, 23.25 },
    new double[] { 16, 22.25 },
    new double[] { 16, 21.25 },
    new double[] { 16, 20.5 },
    new double[] { 16, 19.5 },
    new double[] { 16, 18.25 },
    new double[] { 16, 17.75 },
    new double[] { 15.75, 17 },
    new double[] { 15.75, 16 },
    new double[] { 15.75, 15.25 },
    new double[] { 15.75, 14.5 },
    new double[] { 15.75, 14 },
    new double[] { 15.75, 13.25 },
    new double[] { 15.75, 12.5 },
    new double[] { 15.75, 12 },
    new double[] { 15.75, 11.25 },
    new double[] { 15.75, 10.75 },
    new double[] { 15.75, 10.25 },
    new double[] { 15.75, 9.5 },
    new double[] { 15.75, 9 },
    new double[] { 15.75, 8.5 },
    new double[] { 15.75, 7.75 },
    new double[] { 15.75, 7.25 },
    new double[] { 15.75, 6.75 },
    new double[] { 15.75, 6.5 },
    new double[] { 15.75, 6.25 },
    new double[] { 15.75, 6 },
    new double[] { 15.75, 5.75 },
    new double[] { 15.75, 5 },
    new double[] { 15.75, 4.75 },
    new double[] { 15.75, 4.5 },
    new double[] { 15.75, 4.25 },
    new double[] { 15.5, 4 },
    new double[] { 15.5, 3.75 },
    new double[] { 15.5, 3.25 },
    new double[] { 15.5, 3 },
    new double[] { 15.5, 2.75 } 
},
new double[][] {
    new double[] { 15.25, 26 },
    new double[] { 15.25, 25.5 },
    new double[] { 15.25, 24.75 },
    new double[] { 15.25, 24.25 },
    new double[] { 15.25, 23.5 },
    new double[] { 15.25, 22.75 },
    new double[] { 15.25, 21.75 },
    new double[] { 15.25, 21.5 },
    new double[] { 15.25, 20.75 },
    new double[] { 15.25, 20.25 },
    new double[] { 15.25, 19.5 },
    new double[] { 15.25, 19.25 },
    new double[] { 15.25, 18.75 },
    new double[] { 15.25, 18.25 },
    new double[] { 15.25, 17.75 },
    new double[] { 15.25, 17 },
    new double[] { 15.25, 16.75 },
    new double[] { 15.25, 16.25 },
    new double[] { 15.25, 15.5 },
    new double[] { 15.25, 14.75 },
    new double[] { 15.25, 14.25 },
    new double[] { 15.25, 14 },
    new double[] { 15.25, 13 },
    new double[] { 15.25, 12.75 },
    new double[] { 15.25, 12 },
    new double[] { 15.25, 11.25 },
    new double[] { 15.25, 10.75 },
    new double[] { 15.25, 10 },
    new double[] { 15.25, 9.75 },
    new double[] { 15.25, 9.25 },
    new double[] { 15.25, 8.75 },
    new double[] { 15.25, 8.25 },
    new double[] { 15.25, 8 },
    new double[] { 15.25, 7.75 },
    new double[] { 15.25, 7 },
    new double[] { 15.25, 6.75 },
    new double[] { 15.25, 6.5 },
    new double[] { 15.25, 5.75 },
    new double[] { 15.25, 5.25 },
    new double[] { 15.25, 4.75 },
    new double[] { 15.25, 4.5 },
    new double[] { 15.25, 4 },
    new double[] { 15.25, 3.75 },
    new double[] { 15.25, 3 },
    new double[] { 15.25, 2.5 },
    new double[] { 15.25, 2 },
    new double[] { 15.25, 1.75 },
    new double[] { 15.25, 1.25 },
    new double[] { 15.25, 1 },
    new double[] { 15.25, 0.5 },
    new double[] { 15.25, 0.25 } 
},
new double[][] {
    new double[] { 16, 26.25 },
    new double[] { 16, 25.75 },
    new double[] { 16, 25.5 },
    new double[] { 16, 25.25 },
    new double[] { 16, 24.75 },
    new double[] { 16, 24 },
    new double[] { 16, 23.75 },
    new double[] { 16, 23 },
    new double[] { 16, 22 },
    new double[] { 16, 21.25 },
    new double[] { 16, 20.75 },
    new double[] { 16, 19.5 },
    new double[] { 16, 19 },
    new double[] { 16, 18.25 },
    new double[] { 16, 17.5 },
    new double[] { 16, 17 },
    new double[] { 16, 16.75 },
    new double[] { 16, 16 },
    new double[] { 16, 15.5 },
    new double[] { 16, 14.75 },
    new double[] { 16, 14 },
    new double[] { 16, 13.75 },
    new double[] { 16, 13.25 },
    new double[] { 16, 12.5 },
    new double[] { 16, 12.25 },
    new double[] { 15.75, 12 },
    new double[] { 15.75, 11.75 },
    new double[] { 15.75, 11 },
    new double[] { 15.75, 10.75 },
    new double[] { 15.5, 10.5 },
    new double[] { 15.5, 10.25 },
    new double[] { 15.5, 9.75 },
    new double[] { 15.5, 9.5 },
    new double[] { 15.5, 9.25 },
    new double[] { 15.5, 9 },
    new double[] { 15.5, 8.75 },
    new double[] { 15.25, 8.5 },
    new double[] { 15.25, 8 },
    new double[] { 15.25, 7.75 },
    new double[] { 15.25, 7.5 },
    new double[] { 15.25, 7.5 },
    new double[] { 15.25, 7.25 },
    new double[] { 15, 7 },
    new double[] { 15, 6.75 },
    new double[] { 15, 6.25 },
    new double[] { 15, 6 },
    new double[] { 15, 5.75 },
    new double[] { 15, 5.5 },
    new double[] { 15, 5.25 },
    new double[] { 15, 5 },
    new double[] { 15, 4.5 },
    new double[] { 15, 4.25 },
    new double[] { 15, 4 },
    new double[] { 15.25, 3.5 } 
},
new double[][] {
    new double[] { 4.25, 15 },
    new double[] { 4.5, 15 },
    new double[] { 4.75, 15 },
    new double[] { 5.25, 15 },
    new double[] { 6, 15 },
    new double[] { 6.75, 15 },
    new double[] { 7.75, 15 },
    new double[] { 8.75, 15 },
    new double[] { 9.5, 15 },
    new double[] { 11, 15 },
    new double[] { 12.25, 15 },
    new double[] { 12.75, 15 },
    new double[] { 14, 15 },
    new double[] { 15, 15 },
    new double[] { 15.75, 15 },
    new double[] { 16.25, 15 },
    new double[] { 17, 15 },
    new double[] { 17.75, 15.25 },
    new double[] { 18.25, 15.25 },
    new double[] { 18.5, 15.25 },
    new double[] { 19.25, 15.25 },
    new double[] { 19.75, 15.25 },
    new double[] { 20.5, 15.25 },
    new double[] { 21.25, 15.25 },
    new double[] { 21.75, 15.25 },
    new double[] { 22.5, 15.25 },
    new double[] { 23.25, 15.25 },
    new double[] { 23.5, 15.25 },
    new double[] { 23.75, 15.25 },
    new double[] { 24.25, 15.5 },
    new double[] { 24.75, 15.5 },
    new double[] { 25, 15.5 },
    new double[] { 25.25, 15.5 },
    new double[] { 25.75, 15.5 },
    new double[] { 26.25, 15.5 },
    new double[] { 26.5, 15.5 },
    new double[] { 27, 15.5 },
    new double[] { 27.25, 15.5 },
    new double[] { 27.75, 15.5 },
    new double[] { 28, 15.5 },
    new double[] { 28.25, 15.5 },
    new double[] { 28.5, 15.5 },
    new double[] { 28.75, 15.5 } 
},
new double[][] {
    new double[] { 4.75, 9.75 },
    new double[] { 5, 9.75 },
    new double[] { 5.75, 9.75 },
    new double[] { 6.25, 9.75 },
    new double[] { 7, 9.75 },
    new double[] { 8, 9.75 },
    new double[] { 8.75, 9.75 },
    new double[] { 9.25, 9.75 },
    new double[] { 10.5, 9.75 },
    new double[] { 11, 9.75 },
    new double[] { 11.75, 9.75 },
    new double[] { 12.5, 9.75 },
    new double[] { 12.75, 9.75 },
    new double[] { 13.75, 9.75 },
    new double[] { 14.25, 9.75 },
    new double[] { 15, 9.75 },
    new double[] { 16, 9.75 },
    new double[] { 16.75, 9.75 },
    new double[] { 17.5, 9.75 },
    new double[] { 18.5, 9.75 },
    new double[] { 19.5, 9.75 },
    new double[] { 20.25, 9.75 },
    new double[] { 21, 9.75 },
    new double[] { 21.5, 9.75 },
    new double[] { 22.25, 9.75 },
    new double[] { 22.75, 9.75 },
    new double[] { 23.25, 9.75 },
    new double[] { 23.5, 9.75 },
    new double[] { 23.75, 9.75 },
    new double[] { 24, 10 },
    new double[] { 24.25, 10 },
    new double[] { 25, 10 },
    new double[] { 25.25, 10 },
    new double[] { 25.5, 10 },
    new double[] { 26.25, 10 },
    new double[] { 26.5, 10 },
    new double[] { 27, 10 },
    new double[] { 27.25, 10 },
    new double[] { 27.75, 10.25 },
    new double[] { 28, 10.25 },
    new double[] { 28.25, 10.25 },
    new double[] { 28.5, 10.25 },
    new double[] { 29.25, 10.25 } 
},
new double[][] {
    new double[] { 2.75, 12.25 },
    new double[] { 3.75, 12.25 },
    new double[] { 4, 12.25 },
    new double[] { 5, 12.25 },
    new double[] { 6, 12.25 },
    new double[] { 7, 12.25 },
    new double[] { 8.75, 12.25 },
    new double[] { 9.75, 12.25 },
    new double[] { 10.5, 12.25 },
    new double[] { 11.5, 12.25 },
    new double[] { 12.25, 12.25 },
    new double[] { 13.75, 12.25 },
    new double[] { 14.25, 12.25 },
    new double[] { 15, 12.25 },
    new double[] { 15.75, 12.25 },
    new double[] { 16.25, 12.25 },
    new double[] { 16.5, 12.25 },
    new double[] { 16.75, 12.25 },
    new double[] { 17.5, 12.25 },
    new double[] { 17.75, 12.25 },
    new double[] { 18, 12.25 },
    new double[] { 18.75, 12.25 },
    new double[] { 19, 12.25 },
    new double[] { 19.5, 12.25 },
    new double[] { 20, 12.25 },
    new double[] { 20.5, 12.25 },
    new double[] { 20.75, 12.25 },
    new double[] { 21, 12.25 },
    new double[] { 21.75, 12.25 },
    new double[] { 22.25, 12.25 },
    new double[] { 23, 12 },
    new double[] { 23.25, 12 },
    new double[] { 23.75, 12 },
    new double[] { 24, 12 },
    new double[] { 24.25, 12 },
    new double[] { 24.5, 12 },
    new double[] { 24.75, 12 },
    new double[] { 25, 12 },
    new double[] { 25.5, 12 },
    new double[] { 26, 11.5 },
    new double[] { 26.25, 11.5 },
    new double[] { 26.5, 11.5 },
    new double[] { 27, 11.5 },
    new double[] { 27.25, 11.5 } 
},
new double[][] {
    new double[] { 4.75, 13 },
    new double[] { 5.25, 13 },
    new double[] { 6, 13 },
    new double[] { 6, 13 },
    new double[] { 7, 13 },
    new double[] { 7.75, 13 },
    new double[] { 8.75, 13 },
    new double[] { 9.5, 13 },
    new double[] { 10.25, 13 },
    new double[] { 10.75, 13 },
    new double[] { 11.5, 13 },
    new double[] { 12, 13 },
    new double[] { 13.25, 13 },
    new double[] { 13.75, 13 },
    new double[] { 14.25, 13 },
    new double[] { 14.75, 13 },
    new double[] { 15.5, 13 },
    new double[] { 16, 13 },
    new double[] { 16.25, 13 },
    new double[] { 17, 13 },
    new double[] { 17.75, 13 },
    new double[] { 18, 13 },
    new double[] { 18.25, 13 },
    new double[] { 18.5, 13 },
    new double[] { 19, 13 },
    new double[] { 19.5, 13 },
    new double[] { 19.75, 13 },
    new double[] { 20, 13 },
    new double[] { 20.25, 13 },
    new double[] { 20.5, 13 },
    new double[] { 20.75, 13 },
    new double[] { 21.25, 13 },
    new double[] { 21.5, 13 },
    new double[] { 21.75, 13 },
    new double[] { 22, 13 },
    new double[] { 22.25, 13 },
    new double[] { 22.5, 13 },
    new double[] { 23, 13 },
    new double[] { 23.25, 13 },
    new double[] { 23.5, 13 },
    new double[] { 23.75, 13 },
    new double[] { 24, 13 },
    new double[] { 24.25, 13 },
    new double[] { 24.75, 13 },
    new double[] { 25, 13 },
    new double[] { 25.25, 13 },
    new double[] { 25.5, 13 },
    new double[] { 25.75, 13 },
    new double[] { 26, 13 },
    new double[] { 26.5, 13 } 
},
new double[][] {
    new double[] { 4.25, 12.75 },
    new double[] { 5.25, 12.75 },
    new double[] { 6.5, 12.75 },
    new double[] { 8, 12.75 },
    new double[] { 9, 12.75 },
    new double[] { 10.5, 12.75 },
    new double[] { 12, 12.75 },
    new double[] { 13.25, 12.75 },
    new double[] { 14.75, 12.75 },
    new double[] { 15.75, 12.75 },
    new double[] { 17, 12.75 },
    new double[] { 17.5, 12.75 },
    new double[] { 18.25, 12.75 },
    new double[] { 18.25, 12.75 },
    new double[] { 18.5, 12.75 },
    new double[] { 18.75, 12.75 },
    new double[] { 19, 12.75 },
    new double[] { 19.5, 12.75 },
    new double[] { 20, 12.75 },
    new double[] { 20.25, 12.75 },
    new double[] { 20.5, 12.75 },
    new double[] { 21, 12.75 },
    new double[] { 21.25, 12.75 },
    new double[] { 21.5, 12.75 },
    new double[] { 21.75, 12.75 },
    new double[] { 22, 12.75 },
    new double[] { 22.25, 12.75 },
    new double[] { 22.75, 12.75 },
    new double[] { 23, 12.75 },
    new double[] { 23.25, 12.75 },
    new double[] { 23.5, 12.75 },
    new double[] { 23.75, 12.75 },
    new double[] { 24, 12.75 },
    new double[] { 24.5, 12.75 },
    new double[] { 24.75, 12.75 },
    new double[] { 25, 12.75 },
    new double[] { 25.25, 12.75 },
    new double[] { 25.5, 12.75 },
    new double[] { 25.75, 12.75 },
    new double[] { 26.25, 12.75 } 
},
new double[][] {
    new double[] { 3, 15 },
    new double[] { 3.25, 15 },
    new double[] { 4, 15 },
    new double[] { 4.25, 15 },
    new double[] { 5.5, 15 },
    new double[] { 6.75, 15 },
    new double[] { 6.75, 15 },
    new double[] { 7.25, 15 },
    new double[] { 8.5, 15 },
    new double[] { 9, 15 },
    new double[] { 9.75, 15 },
    new double[] { 10.75, 15 },
    new double[] { 11.5, 15 },
    new double[] { 12.5, 15 },
    new double[] { 13.25, 15 },
    new double[] { 14, 15 },
    new double[] { 14.25, 14.75 },
    new double[] { 14.5, 14.75 },
    new double[] { 15.25, 14.25 },
    new double[] { 15.75, 14.25 },
    new double[] { 16.5, 14.25 },
    new double[] { 16.75, 14.25 },
    new double[] { 17.25, 14.25 },
    new double[] { 17.75, 14.25 },
    new double[] { 18.25, 14.25 },
    new double[] { 19, 14.25 },
    new double[] { 19.5, 14.25 },
    new double[] { 20.25, 14.25 },
    new double[] { 21, 14.25 },
    new double[] { 21.5, 14.25 },
    new double[] { 22.25, 14.25 },
    new double[] { 22.5, 14.25 },
    new double[] { 23, 14.25 },
    new double[] { 23.5, 14.25 },
    new double[] { 23.75, 14.25 },
    new double[] { 24, 14.25 },
    new double[] { 24.25, 14.25 },
    new double[] { 24.5, 14.25 },
    new double[] { 25.25, 14.25 },
    new double[] { 25.5, 14.25 },
    new double[] { 25.75, 14.25 },
    new double[] { 26.5, 14.25 },
    new double[] { 26.75, 14.25 },
    new double[] { 27, 14.25 },
    new double[] { 27.25, 14.25 },
    new double[] { 27.5, 14.25 },
    new double[] { 27.75, 14.25 },
    new double[] { 28, 14.25 },
    new double[] { 28.5, 14.25 },
    new double[] { 28.75, 14.25 },
    new double[] { 29, 14.25 } 
},
new double[][] {
    new double[] { 3.75, 8 },
    new double[] { 4.5, 8 },
    new double[] { 5.5, 8 },
    new double[] { 6.25, 8 },
    new double[] { 7.75, 8 },
    new double[] { 8.75, 8 },
    new double[] { 10, 8 },
    new double[] { 10.5, 8 },
    new double[] { 11.75, 8 },
    new double[] { 12.25, 8 },
    new double[] { 13, 8 },
    new double[] { 14.5, 8 },
    new double[] { 14.75, 8 },
    new double[] { 15, 8 },
    new double[] { 15.5, 8 },
    new double[] { 15.75, 8 },
    new double[] { 16, 8 },
    new double[] { 16.25, 8 },
    new double[] { 16.5, 8 },
    new double[] { 16.75, 8 },
    new double[] { 17.25, 8 },
    new double[] { 17.5, 8 },
    new double[] { 17.75, 8 },
    new double[] { 18, 8 },
    new double[] { 18.25, 8 },
    new double[] { 18.5, 8 },
    new double[] { 19, 8 },
    new double[] { 19.25, 8 },
    new double[] { 19.5, 8 },
    new double[] { 19.75, 8 },
    new double[] { 20.5, 8 },
    new double[] { 20.75, 8 },
    new double[] { 21, 8 },
    new double[] { 21.5, 7.75 },
    new double[] { 22, 7.75 },
    new double[] { 22.25, 7.75 },
    new double[] { 22.5, 7.75 },
    new double[] { 22.75, 7.75 },
    new double[] { 23, 7.75 },
    new double[] { 23.25, 7.75 },
    new double[] { 23.75, 7.75 },
    new double[] { 24.25, 7.5 },
    new double[] { 24.5, 7.5 },
    new double[] { 24.75, 7 },
    new double[] { 25.25, 7 },
    new double[] { 25.5, 7 },
    new double[] { 25.75, 7 },
    new double[] { 26, 7 },
    new double[] { 26.25, 7 },
    new double[] { 26.5, 7 },
    new double[] { 26.5, 7 },
    new double[] { 27.25, 6.75 } 
},
new double[][] {
    new double[] { 4.5, 15.5 },
    new double[] { 4.75, 15.5 },
    new double[] { 5.5, 15.5 },
    new double[] { 6, 15.5 },
    new double[] { 7.25, 15.5 },
    new double[] { 8.25, 15.5 },
    new double[] { 9.5, 15.5 },
    new double[] { 10, 15.5 },
    new double[] { 11.25, 15.5 },
    new double[] { 12.25, 15.5 },
    new double[] { 13, 15.5 },
    new double[] { 14, 15 },
    new double[] { 14.75, 15 },
    new double[] { 15.25, 15 },
    new double[] { 16.5, 14.75 },
    new double[] { 17, 14.75 },
    new double[] { 17.5, 14.75 },
    new double[] { 17.75, 14.75 },
    new double[] { 18.25, 14.25 },
    new double[] { 18.5, 14.25 },
    new double[] { 19.25, 14.25 },
    new double[] { 19.5, 14.25 },
    new double[] { 19.75, 14.25 },
    new double[] { 20, 14.25 },
    new double[] { 20.5, 14.25 },
    new double[] { 21, 14.25 },
    new double[] { 21.25, 14.25 },
    new double[] { 21.5, 14.25 },
    new double[] { 22, 14.25 },
    new double[] { 22.5, 14.25 },
    new double[] { 23.25, 14.25 },
    new double[] { 23.5, 14.25 },
    new double[] { 23.75, 14.25 },
    new double[] { 24, 14.25 },
    new double[] { 24.25, 14.25 },
    new double[] { 24.75, 14.25 },
    new double[] { 25, 14.25 },
    new double[] { 25, 14.25 },
    new double[] { 25.25, 14.25 },
    new double[] { 25.5, 14.25 },
    new double[] { 25.75, 14.25 },
    new double[] { 26, 14.25 },
    new double[] { 26.5, 14.25 },
    new double[] { 26.75, 14.25 },
    new double[] { 27, 14.25 } 
},
new double[][] {
    new double[] { 1.5, 13.5 },
    new double[] { 1.75, 13.5 },
    new double[] { 2, 13.5 },
    new double[] { 2.25, 13.5 },
    new double[] { 3, 13.5 },
    new double[] { 3.25, 13.5 },
    new double[] { 3.5, 13.5 },
    new double[] { 3.75, 13.5 },
    new double[] { 4.75, 13.5 },
    new double[] { 5, 13.5 },
    new double[] { 5.75, 13.5 },
    new double[] { 6, 13.5 },
    new double[] { 6.75, 13.5 },
    new double[] { 7.25, 13.5 },
    new double[] { 7.5, 13.5 },
    new double[] { 8, 13.5 },
    new double[] { 8.25, 13.5 },
    new double[] { 8.75, 13.5 },
    new double[] { 9.5, 13.5 },
    new double[] { 9.75, 13.5 },
    new double[] { 10, 13.5 },
    new double[] { 10.75, 13.5 },
    new double[] { 11.25, 13.5 },
    new double[] { 11.5, 13.5 },
    new double[] { 12, 13.5 },
    new double[] { 12.5, 13.5 },
    new double[] { 12.75, 13.5 },
    new double[] { 13.5, 13.5 },
    new double[] { 14, 13.5 },
    new double[] { 14.75, 13.5 },
    new double[] { 15.5, 13.5 },
    new double[] { 16, 13.5 },
    new double[] { 16.75, 13.5 },
    new double[] { 17.25, 13.5 },
    new double[] { 18, 13.5 },
    new double[] { 18.75, 13.5 },
    new double[] { 19.25, 13.5 },
    new double[] { 20, 13.5 },
    new double[] { 20.75, 13.5 },
    new double[] { 21, 13.5 },
    new double[] { 21.25, 13.5 },
    new double[] { 21.75, 13.5 },
    new double[] { 22.25, 13.5 },
    new double[] { 22.5, 13.5 },
    new double[] { 22.75, 13.5 },
    new double[] { 23.25, 13.75 },
    new double[] { 23.75, 13.75 },
    new double[] { 24.25, 13.75 },
    new double[] { 24.5, 13.75 },
    new double[] { 24.75, 13.75 },
    new double[] { 25.25, 13.75 },
    new double[] { 25.5, 14 },
    new double[] { 25.5, 14 },
    new double[] { 25.75, 14 },
    new double[] { 26, 14 },
    new double[] { 26.25, 14 },
    new double[] { 26.5, 14 } 
},
new double[][] {
    new double[] { 14.25, 23.5 },
    new double[] { 14.25, 23 },
    new double[] { 14.25, 22.75 },
    new double[] { 14.25, 22 },
    new double[] { 14.25, 21.5 },
    new double[] { 14.25, 20.75 },
    new double[] { 14.25, 20 },
    new double[] { 14.25, 19.5 },
    new double[] { 14.25, 18.75 },
    new double[] { 14.25, 18.5 },
    new double[] { 14.25, 18 },
    new double[] { 14.25, 17.25 },
    new double[] { 14.25, 16.5 },
    new double[] { 14.25, 16 },
    new double[] { 14.25, 15.75 },
    new double[] { 14.25, 14.75 },
    new double[] { 14.25, 14.25 },
    new double[] { 14.25, 13.75 },
    new double[] { 14.25, 13 },
    new double[] { 14.25, 12.5 },
    new double[] { 14.25, 11.75 },
    new double[] { 14.25, 11 },
    new double[] { 14.25, 10.75 },
    new double[] { 14.25, 10.25 },
    new double[] { 14.25, 10.25 },
    new double[] { 14.25, 10 },
    new double[] { 14.25, 9.25 },
    new double[] { 14.25, 9 },
    new double[] { 14.25, 8.75 },
    new double[] { 14.25, 8.5 },
    new double[] { 14.25, 8.25 },
    new double[] { 14.25, 7.75 },
    new double[] { 14.25, 7.5 },
    new double[] { 14.25, 7.25 },
    new double[] { 14.25, 7 },
    new double[] { 14.25, 6.25 },
    new double[] { 14.25, 6 },
    new double[] { 14.25, 5.75 },
    new double[] { 14.25, 5.5 },
    new double[] { 14.25, 5.25 },
    new double[] { 14.25, 5 },
    new double[] { 14.25, 4.5 },
    new double[] { 14.25, 4.25 },
    new double[] { 14.25, 4 },
    new double[] { 14.25, 3.75 },
    new double[] { 14.25, 3.5 },
    new double[] { 14.25, 3.25 } 
},
new double[][] {
    new double[] { 16, 24.5 },
    new double[] { 16, 23.5 },
    new double[] { 16, 22.75 },
    new double[] { 16, 22.5 },
    new double[] { 16, 22 },
    new double[] { 16, 21.25 },
    new double[] { 16, 20.5 },
    new double[] { 16, 20 },
    new double[] { 16, 18.75 },
    new double[] { 16, 18.5 },
    new double[] { 16, 17.5 },
    new double[] { 16, 17 },
    new double[] { 16, 16.25 },
    new double[] { 16, 15.5 },
    new double[] { 16, 15 },
    new double[] { 16, 14.25 },
    new double[] { 16, 14 },
    new double[] { 16, 13.25 },
    new double[] { 16, 12.75 },
    new double[] { 16, 12.5 },
    new double[] { 16, 12.25 },
    new double[] { 16, 11.75 },
    new double[] { 16, 11.75 },
    new double[] { 16, 11.5 },
    new double[] { 16, 11 },
    new double[] { 16, 10.75 },
    new double[] { 16, 10 },
    new double[] { 16, 9.75 },
    new double[] { 16, 9.5 },
    new double[] { 16, 9.25 },
    new double[] { 16, 8.75 },
    new double[] { 16, 8.5 },
    new double[] { 16, 8 },
    new double[] { 15.75, 7.75 },
    new double[] { 15.75, 7 },
    new double[] { 15.75, 6.75 },
    new double[] { 15.5, 6.5 },
    new double[] { 15.5, 6.25 },
    new double[] { 15.5, 5.75 },
    new double[] { 15.25, 5.5 },
    new double[] { 15.25, 5.25 },
    new double[] { 15.25, 5 },
    new double[] { 15, 4.25 },
    new double[] { 15, 4 },
    new double[] { 15, 3.75 },
    new double[] { 15, 3.5 },
    new double[] { 15, 3.25 },
    new double[] { 15, 3 },
    new double[] { 15, 2.5 },
    new double[] { 15, 2.25 } 
},
new double[][] {
    new double[] { 22.75, 24 },
    new double[] { 22.75, 23.5 },
    new double[] { 22.75, 22.75 },
    new double[] { 22.75, 22 },
    new double[] { 22.75, 21.75 },
    new double[] { 23.25, 21.25 },
    new double[] { 23.5, 20.5 },
    new double[] { 23.5, 19.75 },
    new double[] { 24, 19 },
    new double[] { 24, 18.5 },
    new double[] { 24.25, 17.75 },
    new double[] { 24.25, 17 },
    new double[] { 24.5, 16.75 },
    new double[] { 24.5, 16.25 },
    new double[] { 24.5, 15.5 },
    new double[] { 25, 14.75 },
    new double[] { 25, 14.25 },
    new double[] { 25, 13.75 },
    new double[] { 25, 13.5 },
    new double[] { 25, 13.25 },
    new double[] { 25.25, 12.25 },
    new double[] { 25.25, 12 },
    new double[] { 25.25, 11.75 },
    new double[] { 25.25, 11.5 },
    new double[] { 25.25, 11.25 },
    new double[] { 25.5, 10.75 },
    new double[] { 25.5, 10.5 },
    new double[] { 25.5, 10.25 },
    new double[] { 25.5, 10 },
    new double[] { 25.5, 9.75 },
    new double[] { 25.5, 9.5 },
    new double[] { 25.5, 9 },
    new double[] { 25.5, 8.75 },
    new double[] { 25.5, 8.5 },
    new double[] { 25.5, 8.25 },
    new double[] { 25.5, 8 },
    new double[] { 25.5, 7.75 },
    new double[] { 25.5, 7.25 },
    new double[] { 25.5, 7 },
    new double[] { 25.25, 6.75 },
    new double[] { 25.25, 6.5 },
    new double[] { 25.25, 6.25 },
    new double[] { 25, 6 },
    new double[] { 25, 5.5 },
    new double[] { 24.5, 5.25 },
    new double[] { 24.5, 5 },
    new double[] { 24.25, 4.75 },
    new double[] { 24.25, 4.5 },
    new double[] { 24.25, 4.25 },
    new double[] { 24.25, 3.75 },
    new double[] { 24.25, 3.5 },
    new double[] { 24, 3.25 },
    new double[] { 24, 3 },
    new double[] { 24, 2.75 },
    new double[] { 24, 2.5 } 
},
new double[][] {
    new double[] { 12, 24.25 },
    new double[] { 12, 23.75 },
    new double[] { 12, 23 },
    new double[] { 12, 22.25 },
    new double[] { 11.75, 21.75 },
    new double[] { 11.75, 21 },
    new double[] { 11.75, 20.25 },
    new double[] { 11.75, 19.75 },
    new double[] { 11.75, 19.5 },
    new double[] { 11.25, 18.75 },
    new double[] { 11.25, 18 },
    new double[] { 11.25, 17.75 },
    new double[] { 11.25, 17.25 },
    new double[] { 11.25, 17 },
    new double[] { 11.25, 16.25 },
    new double[] { 11.25, 16 },
    new double[] { 11.25, 15.75 },
    new double[] { 11.25, 15.5 },
    new double[] { 11.25, 15.25 },
    new double[] { 11.25, 14.5 },
    new double[] { 11.25, 14.25 },
    new double[] { 11.25, 14 },
    new double[] { 11.25, 13.75 },
    new double[] { 11.25, 13.25 },
    new double[] { 11.25, 13 },
    new double[] { 11.25, 12.5 },
    new double[] { 11.25, 12.25 },
    new double[] { 11.25, 11.75 },
    new double[] { 11.25, 11.5 },
    new double[] { 11, 11 },
    new double[] { 11, 10.75 },
    new double[] { 11, 10 },
    new double[] { 11, 9.75 },
    new double[] { 11, 9.5 },
    new double[] { 11, 9.25 },
    new double[] { 11, 8.75 },
    new double[] { 11, 8.5 },
    new double[] { 11, 8.25 },
    new double[] { 11, 8 },
    new double[] { 11, 7.75 },
    new double[] { 11, 7.5 },
    new double[] { 11, 7 },
    new double[] { 11, 6.75 },
    new double[] { 11, 6.5 },
    new double[] { 11, 6.25 },
    new double[] { 11, 6 },
    new double[] { 11, 5.75 },
    new double[] { 11, 5.25 },
    new double[] { 11, 5 },
    new double[] { 11, 4.75 },
    new double[] { 11, 4.5 },
    new double[] { 11, 4.25 },
    new double[] { 11, 4 },
    new double[] { 11, 3.5 },
    new double[] { 11, 3.25 },
    new double[] { 10.75, 3 },
    new double[] { 10.75, 2.75 } 
},
new double[][] {
    new double[] { 7, 27.25 },
    new double[] { 7, 27 },
    new double[] { 7, 26.25 },
    new double[] { 7, 26 },
    new double[] { 7, 25.75 },
    new double[] { 7, 25 },
    new double[] { 7, 24.75 },
    new double[] { 7, 24.25 },
    new double[] { 7, 23.5 },
    new double[] { 7, 22.75 },
    new double[] { 7, 22.5 },
    new double[] { 7, 22 },
    new double[] { 7, 21.25 },
    new double[] { 7, 21 },
    new double[] { 7, 20.75 },
    new double[] { 7.25, 20 },
    new double[] { 7.25, 19.5 },
    new double[] { 7.25, 18.75 },
    new double[] { 7.5, 17.75 },
    new double[] { 8, 16.5 },
    new double[] { 8.25, 15.5 },
    new double[] { 8.25, 15 },
    new double[] { 8.25, 14.75 },
    new double[] { 8.5, 14.25 },
    new double[] { 9, 13.5 },
    new double[] { 9, 13.25 },
    new double[] { 9.25, 12.5 },
    new double[] { 9.75, 11.75 },
    new double[] { 10, 11 },
    new double[] { 10, 10.75 },
    new double[] { 10.25, 10.25 },
    new double[] { 10.5, 10 },
    new double[] { 10.5, 9.5 },
    new double[] { 11.25, 8.5 },
    new double[] { 11.5, 8.25 },
    new double[] { 12, 7.75 },
    new double[] { 12.25, 7.25 },
    new double[] { 12.5, 7 },
    new double[] { 12.75, 6.5 },
    new double[] { 13, 6.25 },
    new double[] { 13.25, 5.75 },
    new double[] { 14, 5.25 },
    new double[] { 14.25, 5 },
    new double[] { 14.5, 4.5 },
    new double[] { 15, 4 },
    new double[] { 15.75, 3.75 },
    new double[] { 16, 3.25 },
    new double[] { 16.25, 3 },
    new double[] { 17.25, 2.75 },
    new double[] { 17.5, 2.5 },
    new double[] { 18, 2.5 },
    new double[] { 18.5, 2.5 },
    new double[] { 18.75, 2.25 },
    new double[] { 19, 2.25 },
    new double[] { 19.75, 1.75 },
    new double[] { 20, 1.75 },
    new double[] { 20.25, 1.75 },
    new double[] { 20.5, 1.75 },
    new double[] { 21.25, 1.5 },
    new double[] { 21.5, 1.5 },
    new double[] { 21.75, 1.25 },
    new double[] { 22, 1.25 },
    new double[] { 22.75, 1.25 },
    new double[] { 23, 1.25 },
    new double[] { 23.25, 1.25 },
    new double[] { 23.5, 1.25 },
    new double[] { 23.75, 1.25 },
    new double[] { 24, 1.25 },
    new double[] { 24.5, 1.25 },
    new double[] { 24.75, 1.25 },
    new double[] { 25, 1.25 } 
},
new double[][] {
    new double[] { 7.25, 24.75 },
    new double[] { 7.25, 24.5 },
    new double[] { 7.25, 24.25 },
    new double[] { 7.25, 23.75 },
    new double[] { 7.25, 23 },
    new double[] { 7.25, 22.25 },
    new double[] { 7.25, 21.75 },
    new double[] { 7.25, 21 },
    new double[] { 7.25, 20.25 },
    new double[] { 7.25, 20 },
    new double[] { 7.25, 19.5 },
    new double[] { 7.25, 19.25 },
    new double[] { 7.25, 18.5 },
    new double[] { 7.25, 18 },
    new double[] { 7.25, 17.25 },
    new double[] { 7.25, 17 },
    new double[] { 7.5, 16.75 },
    new double[] { 7.75, 16 },
    new double[] { 7.75, 15.25 },
    new double[] { 8, 14.75 },
    new double[] { 8.5, 14 },
    new double[] { 8.75, 13.75 },
    new double[] { 9, 13.25 },
    new double[] { 9.25, 12.75 },
    new double[] { 9.75, 12 },
    new double[] { 10.5, 11.25 },
    new double[] { 10.75, 11 },
    new double[] { 11, 10.75 },
    new double[] { 11.25, 10.5 },
    new double[] { 12, 9.75 },
    new double[] { 12.25, 9.5 },
    new double[] { 12.5, 9.25 },
    new double[] { 12.75, 9 },
    new double[] { 13, 8.5 },
    new double[] { 13.75, 8.25 },
    new double[] { 14, 8 },
    new double[] { 14.25, 7.75 },
    new double[] { 14.5, 7.5 },
    new double[] { 15, 7 },
    new double[] { 15.25, 6.75 },
    new double[] { 15.5, 6.5 },
    new double[] { 15.75, 6.5 },
    new double[] { 16, 6.25 },
    new double[] { 16.25, 6 },
    new double[] { 16.75, 6 },
    new double[] { 17, 6 },
    new double[] { 17.5, 5.75 },
    new double[] { 18.25, 5.25 },
    new double[] { 18.5, 5.25 },
    new double[] { 19.25, 4.75 },
    new double[] { 19.5, 4.25 },
    new double[] { 19.75, 4.25 },
    new double[] { 20, 4 },
    new double[] { 20.5, 4 },
    new double[] { 20.75, 4 },
    new double[] { 21.25, 3.75 },
    new double[] { 22.5, 3 },
    new double[] { 22.75, 2.75 },
    new double[] { 23, 2.75 },
    new double[] { 23.75, 2.25 },
    new double[] { 24, 2 },
    new double[] { 24.75, 1.75 },
    new double[] { 25, 1.75 },
    new double[] { 25.25, 1.75 },
    new double[] { 25.5, 1.5 },
    new double[] { 25.75, 1.5 },
    new double[] { 26, 1.5 } 
},
new double[][] {
    new double[] { 6.25, 25.5 },
    new double[] { 6.25, 25 },
    new double[] { 6.25, 24.75 },
    new double[] { 6.25, 24.25 },
    new double[] { 6.25, 24 },
    new double[] { 6.25, 23.75 },
    new double[] { 6.25, 22.75 },
    new double[] { 6.25, 22 },
    new double[] { 6.25, 21.25 },
    new double[] { 6.25, 20.75 },
    new double[] { 6.25, 20 },
    new double[] { 6.25, 19.75 },
    new double[] { 6.5, 18.75 },
    new double[] { 6.75, 18 },
    new double[] { 6.75, 17.25 },
    new double[] { 7, 16.75 },
    new double[] { 7, 16.5 },
    new double[] { 7.5, 16 },
    new double[] { 7.5, 15.75 },
    new double[] { 7.75, 15.25 },
    new double[] { 8, 14.75 },
    new double[] { 8.75, 14.25 },
    new double[] { 9, 13.5 },
    new double[] { 9.25, 13.25 },
    new double[] { 9.5, 13 },
    new double[] { 10.25, 12.25 },
    new double[] { 11, 11.5 },
    new double[] { 11.25, 11.25 },
    new double[] { 11.5, 11 },
    new double[] { 12.25, 10.25 },
    new double[] { 12.5, 10 },
    new double[] { 12.75, 9.75 },
    new double[] { 13.5, 9.5 },
    new double[] { 14.25, 8.75 },
    new double[] { 14.5, 8.5 },
    new double[] { 15, 8 },
    new double[] { 15.75, 7.75 },
    new double[] { 16, 7.5 },
    new double[] { 16.25, 7.5 },
    new double[] { 16.75, 7.25 },
    new double[] { 17.25, 6.75 },
    new double[] { 17.5, 6.75 },
    new double[] { 18, 6.5 },
    new double[] { 18.25, 6.25 },
    new double[] { 18.5, 6.25 },
    new double[] { 18.75, 6.25 },
    new double[] { 19.5, 6 },
    new double[] { 19.75, 5.5 },
    new double[] { 20.25, 5.5 },
    new double[] { 21, 5.5 },
    new double[] { 21.75, 5.25 },
    new double[] { 22.25, 5.25 },
    new double[] { 22.5, 5.25 },
    new double[] { 23, 5.25 },
    new double[] { 24, 5 },
    new double[] { 24.25, 5 },
    new double[] { 24.5, 5 },
    new double[] { 24.75, 5 },
    new double[] { 25, 5 },
    new double[] { 25.25, 5 },
    new double[] { 25.75, 5 },
    new double[] { 26, 5 } 
},
new double[][] {
    new double[] { 9.25, 24 },
    new double[] { 9, 23.5 },
    new double[] { 9, 23 },
    new double[] { 9, 22.75 },
    new double[] { 9, 22 },
    new double[] { 9, 21.5 },
    new double[] { 9, 21 },
    new double[] { 9, 20.5 },
    new double[] { 9, 19.5 },
    new double[] { 9, 19 },
    new double[] { 9, 18.5 },
    new double[] { 9, 18.25 },
    new double[] { 9, 17.5 },
    new double[] { 9, 17 },
    new double[] { 9, 16.75 },
    new double[] { 9, 16.25 },
    new double[] { 9, 15.75 },
    new double[] { 9, 15.5 },
    new double[] { 9.25, 15.25 },
    new double[] { 9.25, 14.75 },
    new double[] { 9.75, 14.25 },
    new double[] { 10, 14 },
    new double[] { 10.25, 13.25 },
    new double[] { 10.5, 12.5 },
    new double[] { 10.5, 12.25 },
    new double[] { 11, 12 },
    new double[] { 11.25, 11.25 },
    new double[] { 11.5, 11 },
    new double[] { 11.75, 10.75 },
    new double[] { 11.75, 10.75 },
    new double[] { 12, 10.5 },
    new double[] { 12.5, 10.25 },
    new double[] { 12.75, 10 },
    new double[] { 13, 9.25 },
    new double[] { 13.25, 9 },
    new double[] { 13.5, 8.75 },
    new double[] { 13.75, 8.5 },
    new double[] { 14.25, 8 },
    new double[] { 14.5, 8 },
    new double[] { 14.75, 7.75 },
    new double[] { 15.25, 7.75 },
    new double[] { 15.75, 7.5 },
    new double[] { 16, 7.5 },
    new double[] { 16.5, 7.25 },
    new double[] { 17.25, 6.75 },
    new double[] { 17.5, 6.75 },
    new double[] { 17.75, 6.75 },
    new double[] { 18.5, 6.5 },
    new double[] { 18.75, 6.5 },
    new double[] { 19.5, 6.25 },
    new double[] { 19.75, 6.25 },
    new double[] { 20, 6.25 },
    new double[] { 20.25, 6.25 },
    new double[] { 20.5, 6.25 },
    new double[] { 21, 6 },
    new double[] { 21.25, 6 },
    new double[] { 21.5, 6 },
    new double[] { 22, 6 },
    new double[] { 22.75, 5.5 },
    new double[] { 23, 5.5 },
    new double[] { 23.5, 5.5 },
    new double[] { 23.75, 5.5 },
    new double[] { 24, 5.5 },
    new double[] { 24.25, 5.5 },
    new double[] { 24.5, 5.25 } 
},
new double[][] {
    new double[] { 5.25, 26.75 },
    new double[] { 5.25, 26.25 },
    new double[] { 5.25, 25.5 },
    new double[] { 5.25, 25 },
    new double[] { 5.25, 23.5 },
    new double[] { 5.25, 22.75 },
    new double[] { 5.25, 22 },
    new double[] { 5.25, 21 },
    new double[] { 5.25, 20.25 },
    new double[] { 5.25, 19.75 },
    new double[] { 5.25, 19 },
    new double[] { 5.25, 18.25 },
    new double[] { 5.25, 17.75 },
    new double[] { 5.25, 17.5 },
    new double[] { 5.25, 16.5 },
    new double[] { 5.25, 16.25 },
    new double[] { 5.25, 15.5 },
    new double[] { 5.25, 14.75 },
    new double[] { 5.5, 14 },
    new double[] { 5.5, 13.75 },
    new double[] { 6, 13.25 },
    new double[] { 6, 13 },
    new double[] { 6.25, 12.5 },
    new double[] { 6.5, 12 },
    new double[] { 6.75, 11.75 },
    new double[] { 7.25, 11 },
    new double[] { 7.5, 10.75 },
    new double[] { 7.75, 10 },
    new double[] { 8, 9.75 },
    new double[] { 8.25, 9.5 },
    new double[] { 9, 8.75 },
    new double[] { 9.25, 8.5 },
    new double[] { 10, 8.25 },
    new double[] { 15, 5.25 },
    new double[] { 15.25, 5.25 },
    new double[] { 15.5, 5.25 },
    new double[] { 16.5, 5 },
    new double[] { 17.25, 4.5 },
    new double[] { 17.5, 4.5 },
    new double[] { 18.5, 4.25 },
    new double[] { 18.75, 4.25 },
    new double[] { 19, 4.25 },
    new double[] { 19.5, 4.25 },
    new double[] { 19.75, 4.25 },
    new double[] { 20, 4 },
    new double[] { 20.25, 3.75 },
    new double[] { 20.75, 3.75 },
    new double[] { 21.25, 3.75 },
    new double[] { 21.5, 3.75 },
    new double[] { 21.75, 3.75 },
    new double[] { 22, 3.75 },
    new double[] { 22.25, 3.75 },
    new double[] { 22.5, 3.75 } 
},
new double[][] {
    new double[] { 7.5, 25.5 },
    new double[] { 7.5, 25.25 },
    new double[] { 7.5, 24.75 },
    new double[] { 7.5, 24.5 },
    new double[] { 7.5, 23.5 },
    new double[] { 7.5, 23.25 },
    new double[] { 7.5, 22.5 },
    new double[] { 7.5, 22.25 },
    new double[] { 7.5, 22 },
    new double[] { 7.5, 21 },
    new double[] { 7.5, 20.75 },
    new double[] { 7.5, 20.25 },
    new double[] { 7.5, 19.75 },
    new double[] { 8, 19 },
    new double[] { 8, 18.75 },
    new double[] { 8.25, 18 },
    new double[] { 8.25, 17.75 },
    new double[] { 9, 17.25 },
    new double[] { 9.25, 16.5 },
    new double[] { 9.5, 16.25 },
    new double[] { 10, 15.5 },
    new double[] { 10.5, 14.75 },
    new double[] { 11, 14.5 },
    new double[] { 11.5, 13.75 },
    new double[] { 11.75, 13.5 },
    new double[] { 12.5, 13 },
    new double[] { 12.75, 12.5 },
    new double[] { 13.5, 12 },
    new double[] { 13.75, 11.75 },
    new double[] { 14, 11.5 },
    new double[] { 14.75, 10.75 },
    new double[] { 15, 10.5 },
    new double[] { 15.25, 10.25 },
    new double[] { 16, 9.5 },
    new double[] { 16.25, 9.25 },
    new double[] { 16.75, 9 },
    new double[] { 17.25, 8.5 },
    new double[] { 17.5, 8.25 },
    new double[] { 17.75, 8 },
    new double[] { 18.5, 7.75 },
    new double[] { 18.75, 7.5 },
    new double[] { 18.75, 7.5 },
    new double[] { 19, 7 },
    new double[] { 19.5, 6.75 },
    new double[] { 20, 6.75 },
    new double[] { 20.5, 6.5 },
    new double[] { 21.25, 6 },
    new double[] { 21.5, 6 },
    new double[] { 21.75, 6 },
    new double[] { 22, 5.75 },
    new double[] { 22.5, 5.75 },
    new double[] { 22.75, 5.75 },
    new double[] { 23, 5.75 },
    new double[] { 23.25, 5.75 },
    new double[] { 24, 5.5 } 
},
new double[][] {
    new double[] { 2.5, 14.25 },
    new double[] { 3, 14 },
    new double[] { 3.75, 13.25 },
    new double[] { 4.5, 12.5 },
    new double[] { 5.25, 11.75 },
    new double[] { 5.5, 11.5 },
    new double[] { 5.75, 11.25 },
    new double[] { 6, 10.75 },
    new double[] { 6.75, 10.5 },
    new double[] { 7, 10.5 },
    new double[] { 7.25, 10.5 },
    new double[] { 7.75, 10.5 },
    new double[] { 8, 10.5 },
    new double[] { 8.5, 11.25 },
    new double[] { 8.5, 11.5 },
    new double[] { 9, 12.5 },
    new double[] { 9.25, 13.25 },
    new double[] { 9.5, 14 },
    new double[] { 10, 14.5 },
    new double[] { 10.25, 15.25 },
    new double[] { 10.5, 15.5 },
    new double[] { 11, 16.25 },
    new double[] { 11.25, 16.5 },
    new double[] { 11.5, 16.75 },
    new double[] { 12.25, 16.75 },
    new double[] { 12.5, 16.75 },
    new double[] { 13, 16.75 },
    new double[] { 14.75, 16.25 },
    new double[] { 15.5, 15.5 },
    new double[] { 16, 15.5 },
    new double[] { 16.75, 14.75 },
    new double[] { 18, 14 },
    new double[] { 18.75, 13.25 },
    new double[] { 19.25, 13 },
    new double[] { 19.75, 12.75 },
    new double[] { 20, 12.25 },
    new double[] { 20.25, 12 },
    new double[] { 20.5, 11.75 },
    new double[] { 20.75, 11.5 },
    new double[] { 21, 11.25 },
    new double[] { 21.5, 11.25 },
    new double[] { 21.5, 11.25 },
    new double[] { 21.75, 11.25 },
    new double[] { 22, 12 },
    new double[] { 22.25, 12.5 },
    new double[] { 22.25, 13 },
    new double[] { 22.75, 13.5 },
    new double[] { 23, 14.75 },
    new double[] { 23.5, 15.25 },
    new double[] { 23.75, 16 },
    new double[] { 24, 16.25 },
    new double[] { 24.25, 16.75 },
    new double[] { 24.75, 17 },
    new double[] { 25, 17 },
    new double[] { 25.5, 17 },
    new double[] { 26.25, 17 },
    new double[] { 26.5, 17 },
    new double[] { 27.5, 16.5 },
    new double[] { 27.75, 16.25 },
    new double[] { 28, 16 },
    new double[] { 28.25, 15.5 },
    new double[] { 29, 14.5 },
    new double[] { 29.25, 14.25 },
    new double[] { 29.75, 13.75 },
    new double[] { 30, 13.5 },
    new double[] { 30, 13 },
    new double[] { 30.25, 12.75 },
    new double[] { 30.5, 12.25 } 
},
new double[][] {
    new double[] { 3.25, 15.75 },
    new double[] { 3.75, 15.25 },
    new double[] { 4.5, 14.5 },
    new double[] { 5.5, 13.25 },
    new double[] { 6.25, 12.5 },
    new double[] { 6.5, 12.25 },
    new double[] { 7.25, 11.5 },
    new double[] { 8, 10.75 },
    new double[] { 8.25, 10.5 },
    new double[] { 8.5, 10.25 },
    new double[] { 8.75, 10 },
    new double[] { 9.25, 10 },
    new double[] { 9.75, 10.25 },
    new double[] { 10, 10.75 },
    new double[] { 10, 11 },
    new double[] { 10, 11.25 },
    new double[] { 10, 11.75 },
    new double[] { 10.5, 12.25 },
    new double[] { 10.5, 12.5 },
    new double[] { 10.5, 12.75 },
    new double[] { 10.75, 13 },
    new double[] { 10.75, 13.25 },
    new double[] { 11, 13.5 },
    new double[] { 11, 14 },
    new double[] { 11.25, 14.25 },
    new double[] { 11.5, 14.25 },
    new double[] { 12.25, 14 },
    new double[] { 12.5, 13.75 },
    new double[] { 12.75, 13.75 },
    new double[] { 13.75, 13.25 },
    new double[] { 14.5, 12.75 },
    new double[] { 15.25, 12.5 },
    new double[] { 16.25, 11.75 },
    new double[] { 17, 11.25 },
    new double[] { 17.75, 11 },
    new double[] { 19.5, 9.75 },
    new double[] { 20, 9.25 },
    new double[] { 20.75, 8.75 },
    new double[] { 22, 8.25 },
    new double[] { 22.25, 8 },
    new double[] { 22.5, 8 },
    new double[] { 23, 9 },
    new double[] { 23.25, 9.75 },
    new double[] { 23.25, 9.75 },
    new double[] { 23.25, 10 },
    new double[] { 23.5, 10.25 },
    new double[] { 23.75, 11.25 },
    new double[] { 24.25, 12 },
    new double[] { 24.5, 12.75 },
    new double[] { 24.5, 13 },
    new double[] { 24.75, 13.25 },
    new double[] { 24.75, 13.5 },
    new double[] { 25.25, 13.75 },
    new double[] { 25.5, 14.25 } 
},
new double[][] {
    new double[] { 2.5, 15.75 },
    new double[] { 2.5, 15.5 },
    new double[] { 2.75, 14.75 },
    new double[] { 2.75, 14.25 },
    new double[] { 3.5, 13.5 },
    new double[] { 4, 12.75 },
    new double[] { 4.25, 12 },
    new double[] { 5, 11.25 },
    new double[] { 5.25, 11 },
    new double[] { 5.5, 10.75 },
    new double[] { 5.75, 10.5 },
    new double[] { 6.25, 10.5 },
    new double[] { 6.5, 10.5 },
    new double[] { 7, 10.5 },
    new double[] { 7.25, 10.5 },
    new double[] { 7.75, 10.5 },
    new double[] { 8.25, 10.75 },
    new double[] { 9, 11.5 },
    new double[] { 9.25, 11.75 },
    new double[] { 10, 13 },
    new double[] { 10.25, 13.25 },
    new double[] { 10.5, 13.5 },
    new double[] { 11, 14 },
    new double[] { 11, 14.75 },
    new double[] { 11.25, 15 },
    new double[] { 11.5, 15 },
    new double[] { 11.75, 14.75 },
    new double[] { 12, 14.5 },
    new double[] { 12.75, 13.75 },
    new double[] { 13.5, 13 },
    new double[] { 13.75, 12.75 },
    new double[] { 14.5, 12.5 },
    new double[] { 15.5, 11.75 },
    new double[] { 16.25, 11 },
    new double[] { 16.5, 10.75 },
    new double[] { 16.75, 10.25 },
    new double[] { 17.25, 10 },
    new double[] { 17.5, 9.75 },
    new double[] { 17.75, 9.75 },
    new double[] { 18.25, 10.25 },
    new double[] { 18.25, 10.25 },
    new double[] { 18.75, 10.75 },
    new double[] { 19, 12 },
    new double[] { 19.5, 12.25 },
    new double[] { 19.75, 13 },
    new double[] { 20, 13.75 },
    new double[] { 20.25, 14 },
    new double[] { 20.25, 14.25 },
    new double[] { 21, 14.75 },
    new double[] { 21.25, 15.25 },
    new double[] { 21.5, 15.5 },
    new double[] { 22, 15.5 },
    new double[] { 22.25, 15.5 },
    new double[] { 22.5, 15.5 },
    new double[] { 22.75, 15 },
    new double[] { 23.5, 14.75 },
    new double[] { 23.75, 14.5 },
    new double[] { 24, 14.25 },
    new double[] { 24.75, 13.5 },
    new double[] { 25, 13.25 },
    new double[] { 25.25, 13 },
    new double[] { 25.5, 12.75 },
    new double[] { 25.75, 12.5 },
    new double[] { 26, 11.75 },
    new double[] { 26.5, 11.5 },
    new double[] { 26.5, 11.25 },
    new double[] { 26.75, 11 },
    new double[] { 27, 10.5 },
    new double[] { 27.25, 10.25 } 
},
new double[][] {
    new double[] { 2.5, 21.5 },
    new double[] { 2.75, 21.25 },
    new double[] { 2.75, 20.5 },
    new double[] { 3.5, 19.75 },
    new double[] { 3.75, 19.25 },
    new double[] { 4.75, 18 },
    new double[] { 5, 17 },
    new double[] { 5.75, 15.75 },
    new double[] { 6.5, 14 },
    new double[] { 7.25, 13 },
    new double[] { 8, 12.25 },
    new double[] { 8.75, 11 },
    new double[] { 9.5, 10.25 },
    new double[] { 10, 9.75 },
    new double[] { 10.25, 9.25 },
    new double[] { 11, 8.25 },
    new double[] { 11.25, 8 },
    new double[] { 11.75, 8.5 },
    new double[] { 12.25, 9.25 },
    new double[] { 12.25, 9.75 },
    new double[] { 12.5, 10.5 },
    new double[] { 12.5, 10.75 },
    new double[] { 12.5, 11.75 },
    new double[] { 13, 13 },
    new double[] { 13, 13.5 },
    new double[] { 13, 14.75 },
    new double[] { 13.25, 16.25 },
    new double[] { 13.25, 16.5 },
    new double[] { 13.25, 17.25 },
    new double[] { 13.75, 18.25 },
    new double[] { 13.75, 18.5 },
    new double[] { 14, 18.75 },
    new double[] { 14.25, 18.75 },
    new double[] { 14.5, 18.75 },
    new double[] { 15.25, 18.75 },
    new double[] { 15.5, 18.5 },
    new double[] { 16.25, 17.5 },
    new double[] { 17, 16.75 },
    new double[] { 17.5, 16 },
    new double[] { 18, 15.75 },
    new double[] { 18.5, 14.75 },
    new double[] { 19.25, 13.5 },
    new double[] { 20, 12.75 },
    new double[] { 20.25, 12.5 },
    new double[] { 21, 11.5 },
    new double[] { 21.5, 10.75 },
    new double[] { 21.75, 10.5 },
    new double[] { 22, 10.5 },
    new double[] { 22.25, 10.5 },
    new double[] { 22.5, 10.5 },
    new double[] { 23, 11.25 },
    new double[] { 23, 12 },
    new double[] { 23.25, 13 },
    new double[] { 23.25, 14 },
    new double[] { 23.75, 15.25 },
    new double[] { 23.75, 15.25 },
    new double[] { 24, 16 },
    new double[] { 24.25, 16.5 },
    new double[] { 24.25, 17 },
    new double[] { 25, 17.5 },
    new double[] { 25, 17.75 },
    new double[] { 25.25, 18.25 },
    new double[] { 25.25, 18.5 },
    new double[] { 25.5, 18.75 },
    new double[] { 26.25, 18.25 },
    new double[] { 26.5, 18 },
    new double[] { 26.5, 17.5 },
    new double[] { 26.75, 16.75 },
    new double[] { 27.25, 16 },
    new double[] { 27.5, 15.25 },
    new double[] { 27.5, 15 },
    new double[] { 27.5, 14.75 },
    new double[] { 27.5, 14.5 },
    new double[] { 27.5, 14.25 },
    new double[] { 27.75, 13.75 } 
},
new double[][] {
    new double[] { 1, 16.25 },
    new double[] { 1.25, 16 },
    new double[] { 1.5, 15.75 },
    new double[] { 2, 15.5 },
    new double[] { 2.5, 14.5 },
    new double[] { 2.75, 14 },
    new double[] { 3.25, 13.75 },
    new double[] { 3.75, 13.25 },
    new double[] { 3.75, 12.75 },
    new double[] { 4.5, 11.75 },
    new double[] { 4.75, 11.5 },
    new double[] { 5, 11.25 },
    new double[] { 6, 10.25 },
    new double[] { 6.75, 9.5 },
    new double[] { 7.5, 8.75 },
    new double[] { 8.25, 8 },
    new double[] { 8.5, 7.75 },
    new double[] { 9.25, 7 },
    new double[] { 9.5, 6.75 },
    new double[] { 9.75, 6.5 },
    new double[] { 10.5, 7 },
    new double[] { 10.5, 7.5 },
    new double[] { 10.75, 8.25 },
    new double[] { 11.25, 9.5 },
    new double[] { 11.25, 10 },
    new double[] { 11.5, 10.75 },
    new double[] { 12, 12 },
    new double[] { 12, 12.25 },
    new double[] { 12, 13.25 },
    new double[] { 12.25, 14.25 },
    new double[] { 12.25, 15 },
    new double[] { 12.25, 15.25 },
    new double[] { 12.5, 15.5 },
    new double[] { 12.5, 15.75 },
    new double[] { 12.75, 16 },
    new double[] { 13.25, 16 },
    new double[] { 13.75, 16 },
    new double[] { 13.75, 16 },
    new double[] { 14, 16 },
    new double[] { 15, 15.75 },
    new double[] { 15.75, 15 },
    new double[] { 16.5, 14.25 },
    new double[] { 17.25, 13.5 },
    new double[] { 18.5, 12.25 },
    new double[] { 19.25, 11.5 },
    new double[] { 20.25, 10.5 },
    new double[] { 20.75, 10.25 },
    new double[] { 21.25, 9.5 },
    new double[] { 21.5, 9.25 },
    new double[] { 21.75, 9 },
    new double[] { 22.25, 8.5 },
    new double[] { 22.5, 8.5 },
    new double[] { 22.75, 8.5 },
    new double[] { 23.5, 8.75 },
    new double[] { 23.5, 9 },
    new double[] { 23.75, 9.5 },
    new double[] { 23.75, 10.75 },
    new double[] { 24, 11.75 },
    new double[] { 24, 13 },
    new double[] { 24, 14 },
    new double[] { 24, 15 },
    new double[] { 24, 16.75 },
    new double[] { 24, 17.25 },
    new double[] { 24.5, 18.5 },
    new double[] { 24.75, 19 },
    new double[] { 24.75, 19.5 },
    new double[] { 24.75, 20 },
    new double[] { 24.75, 20.25 },
    new double[] { 24.75, 20.5 },
    new double[] { 25, 21 },
    new double[] { 25.75, 20.75 },
    new double[] { 26, 20.5 },
    new double[] { 26.25, 20.25 },
    new double[] { 26.5, 20 },
    new double[] { 27, 19.75 },
    new double[] { 27.25, 19.25 },
    new double[] { 27.75, 18.75 },
    new double[] { 28.25, 18 },
    new double[] { 28.5, 17.75 } 
},
new double[][] {
    new double[] { 17.25, 26.75 },
    new double[] { 17, 26.75 },
    new double[] { 16.25, 26 },
    new double[] { 16, 25.75 },
    new double[] { 15.5, 25.25 },
    new double[] { 15, 25 },
    new double[] { 14.75, 24.5 },
    new double[] { 14.25, 24 },
    new double[] { 13.75, 23.75 },
    new double[] { 13.5, 23.25 },
    new double[] { 13.25, 23 },
    new double[] { 13, 22.75 },
    new double[] { 12.75, 22.5 },
    new double[] { 12.5, 22.25 },
    new double[] { 12, 22 },
    new double[] { 11.75, 21.5 },
    new double[] { 11.5, 21.25 },
    new double[] { 11.5, 21 },
    new double[] { 11.5, 20.5 },
    new double[] { 11.5, 20 },
    new double[] { 11.5, 19.5 },
    new double[] { 12.25, 18.75 },
    new double[] { 13.5, 18 },
    new double[] { 14.25, 17.75 },
    new double[] { 15.25, 16.75 },
    new double[] { 16, 16.75 },
    new double[] { 16.75, 16.5 },
    new double[] { 17.75, 15.75 },
    new double[] { 18.25, 15.5 },
    new double[] { 18.5, 15.25 },
    new double[] { 18.75, 14.75 },
    new double[] { 19, 14.5 },
    new double[] { 19, 14.5 },
    new double[] { 19, 14 },
    new double[] { 18.75, 13.75 },
    new double[] { 18.25, 13.25 },
    new double[] { 17.75, 13 },
    new double[] { 17.5, 12.75 },
    new double[] { 16.75, 12.5 },
    new double[] { 16.5, 12.25 },
    new double[] { 15.75, 11.75 },
    new double[] { 15.5, 11.5 },
    new double[] { 15, 11.5 },
    new double[] { 14.75, 11.25 },
    new double[] { 14.25, 11 },
    new double[] { 14, 10.75 },
    new double[] { 14, 10.25 },
    new double[] { 14, 9.75 },
    new double[] { 14, 9.5 },
    new double[] { 14.25, 8.75 },
    new double[] { 14.5, 8.5 },
    new double[] { 15, 7.75 },
    new double[] { 15.25, 7.5 },
    new double[] { 15.75, 7.25 },
    new double[] { 16.75, 6.5 },
    new double[] { 17, 6.5 },
    new double[] { 17.5, 6 },
    new double[] { 18, 6 },
    new double[] { 18.5, 5.75 },
    new double[] { 18.75, 5.25 },
    new double[] { 18.75, 5 },
    new double[] { 18.75, 4.5 },
    new double[] { 18.5, 4 },
    new double[] { 18.25, 3.75 },
    new double[] { 17.5, 3.5 },
    new double[] { 17, 3.5 },
    new double[] { 16.5, 3.25 },
    new double[] { 16, 3 },
    new double[] { 15.75, 3 },
    new double[] { 15.5, 3 } 
},
new double[][] {
    new double[] { 18.5, 27.5 },
    new double[] { 18.25, 27.5 },
    new double[] { 18, 27.5 },
    new double[] { 17.25, 27 },
    new double[] { 16.5, 26.75 },
    new double[] { 16, 26.5 },
    new double[] { 14.75, 25.75 },
    new double[] { 14, 25.25 },
    new double[] { 13, 25 },
    new double[] { 12.25, 24.25 },
    new double[] { 11.5, 23.75 },
    new double[] { 10.75, 23 },
    new double[] { 10.5, 22.75 },
    new double[] { 9.75, 22.5 },
    new double[] { 9.5, 22.25 },
    new double[] { 9, 21.5 },
    new double[] { 8.5, 21.25 },
    new double[] { 8.25, 20.5 },
    new double[] { 8.25, 20.25 },
    new double[] { 8.25, 20 },
    new double[] { 8.25, 19.75 },
    new double[] { 8.25, 19.5 },
    new double[] { 8.75, 18.75 },
    new double[] { 8.75, 18.75 },
    new double[] { 9.5, 18.5 },
    new double[] { 10.5, 18 },
    new double[] { 11.25, 17.25 },
    new double[] { 12.25, 17 },
    new double[] { 13.5, 16.25 },
    new double[] { 14.25, 15.75 },
    new double[] { 15, 15.5 },
    new double[] { 15.75, 14.75 },
    new double[] { 16.25, 14.5 },
    new double[] { 16.75, 14 },
    new double[] { 17, 13.75 },
    new double[] { 17.25, 13.5 },
    new double[] { 17.25, 13.25 },
    new double[] { 17, 13 },
    new double[] { 16.5, 12.75 },
    new double[] { 16.25, 12.25 },
    new double[] { 16, 12 },
    new double[] { 15.75, 11.75 },
    new double[] { 15.5, 11.5 },
    new double[] { 14.75, 10.75 },
    new double[] { 14.5, 10.5 },
    new double[] { 14.25, 10.25 },
    new double[] { 14, 10 },
    new double[] { 14, 9.75 },
    new double[] { 13.5, 9.5 },
    new double[] { 13.5, 9 },
    new double[] { 13.25, 8.75 },
    new double[] { 13, 8.5 },
    new double[] { 13, 8.25 },
    new double[] { 13, 8 },
    new double[] { 13.25, 7.75 },
    new double[] { 13.75, 7.25 },
    new double[] { 14, 7 },
    new double[] { 14.25, 6.75 },
    new double[] { 15, 6 },
    new double[] { 15.5, 5.5 },
    new double[] { 16, 5 },
    new double[] { 16.5, 4.5 },
    new double[] { 17.25, 4 },
    new double[] { 18, 3.75 },
    new double[] { 19, 3 },
    new double[] { 19.5, 3 },
    new double[] { 19.75, 2.75 },
    new double[] { 20.25, 2.25 },
    new double[] { 20.75, 2 },
    new double[] { 21, 1.75 } 
},
new double[][] {
    new double[] { 11, 26 },
    new double[] { 11.25, 26 },
    new double[] { 11.75, 25.75 },
    new double[] { 12.25, 25 },
    new double[] { 13, 24.75 },
    new double[] { 13.75, 24.25 },
    new double[] { 14.5, 24 },
    new double[] { 15, 23.25 },
    new double[] { 16.25, 22.5 },
    new double[] { 16.5, 22.25 },
    new double[] { 17.25, 21.75 },
    new double[] { 17.5, 21.75 },
    new double[] { 18.25, 21.5 },
    new double[] { 18.5, 21.25 },
    new double[] { 18.75, 21 },
    new double[] { 19.25, 20.75 },
    new double[] { 19.75, 20.25 },
    new double[] { 20.25, 20 },
    new double[] { 20.5, 19.75 },
    new double[] { 21.25, 19.5 },
    new double[] { 21.5, 19 },
    new double[] { 21.75, 18.75 },
    new double[] { 21.75, 18.5 },
    new double[] { 21.25, 18.5 },
    new double[] { 20.5, 18.25 },
    new double[] { 20.5, 18.25 },
    new double[] { 19.75, 18.25 },
    new double[] { 19, 17.75 },
    new double[] { 18.5, 17.5 },
    new double[] { 17.25, 17 },
    new double[] { 16.5, 16.75 },
    new double[] { 15.5, 16 },
    new double[] { 14.75, 15.25 },
    new double[] { 14.5, 15.25 },
    new double[] { 13.5, 14.5 },
    new double[] { 13, 14.25 },
    new double[] { 12.5, 14.25 },
    new double[] { 12.25, 14 },
    new double[] { 12, 13.75 },
    new double[] { 11.5, 13.5 },
    new double[] { 11.25, 13.25 },
    new double[] { 11.75, 12.75 },
    new double[] { 12.5, 12 },
    new double[] { 14, 10.75 },
    new double[] { 14.75, 10.5 },
    new double[] { 15.5, 10.25 },
    new double[] { 16.75, 9.25 },
    new double[] { 17.75, 9 },
    new double[] { 18, 8.75 },
    new double[] { 18.75, 8 },
    new double[] { 19.5, 7.75 },
    new double[] { 19.75, 7.5 },
    new double[] { 20, 7 },
    new double[] { 20.25, 6.75 },
    new double[] { 20.5, 6.5 },
    new double[] { 20.5, 6 },
    new double[] { 20.25, 5.5 },
    new double[] { 19.5, 5.25 },
    new double[] { 19.25, 5 },
    new double[] { 18.25, 4.75 },
    new double[] { 18, 4.25 },
    new double[] { 17.75, 4.25 },
    new double[] { 17, 3.75 },
    new double[] { 16.25, 3.25 },
    new double[] { 16, 3.25 },
    new double[] { 15.75, 3 },
    new double[] { 15.5, 2.75 } 
},
new double[][] {
    new double[] { 9.25, 26.25 },
    new double[] { 9.75, 26.25 },
    new double[] { 10, 26.25 },
    new double[] { 10.25, 26 },
    new double[] { 10.75, 25.75 },
    new double[] { 12, 24.5 },
    new double[] { 12.75, 24.25 },
    new double[] { 13.5, 23.75 },
    new double[] { 13.75, 23.5 },
    new double[] { 14.75, 23.25 },
    new double[] { 15.5, 22.75 },
    new double[] { 16, 22.5 },
    new double[] { 17.25, 21.75 },
    new double[] { 18, 21.25 },
    new double[] { 18.25, 21.25 },
    new double[] { 18.25, 21.25 },
    new double[] { 19, 21 },
    new double[] { 19.5, 20.75 },
    new double[] { 20, 20.75 },
    new double[] { 20.25, 20.5 },
    new double[] { 20, 19.75 },
    new double[] { 19.75, 19.5 },
    new double[] { 19.25, 19.25 },
    new double[] { 18.5, 18.75 },
    new double[] { 17.25, 18.5 },
    new double[] { 16.75, 18 },
    new double[] { 16, 17.75 },
    new double[] { 14.75, 17.25 },
    new double[] { 14.5, 17 },
    new double[] { 14, 16.75 },
    new double[] { 13.25, 16.75 },
    new double[] { 13, 16.5 },
    new double[] { 12.75, 16.25 },
    new double[] { 12.25, 15.75 },
    new double[] { 12, 15.5 },
    new double[] { 11.75, 15.25 },
    new double[] { 10.75, 14.5 },
    new double[] { 10.5, 14.25 },
    new double[] { 10.5, 14 },
    new double[] { 10.5, 13.5 },
    new double[] { 10.75, 13 },
    new double[] { 11.25, 12.75 },
    new double[] { 11.5, 12.5 },
    new double[] { 11.75, 12.25 },
    new double[] { 12, 12 },
    new double[] { 12.25, 11.75 },
    new double[] { 12.5, 11.25 },
    new double[] { 13, 11 },
    new double[] { 13.5, 10.75 },
    new double[] { 13.75, 10.5 },
    new double[] { 14.5, 10 },
    new double[] { 15.25, 9.75 },
    new double[] { 15.75, 9.5 },
    new double[] { 16.25, 9.5 },
    new double[] { 16.5, 9.25 },
    new double[] { 16.75, 8.75 },
    new double[] { 17, 8.5 },
    new double[] { 16.25, 6.25 },
    new double[] { 16, 5.5 },
    new double[] { 15.75, 5.25 },
    new double[] { 15.25, 5 },
    new double[] { 15, 4.75 },
    new double[] { 14.75, 4.5 },
    new double[] { 14.5, 4.25 },
    new double[] { 14.25, 3.75 },
    new double[] { 14, 3.5 },
    new double[] { 14, 3.25 },
    new double[] { 14, 3 },
    new double[] { 14, 2.75 },
    new double[] { 13.5, 2.5 } 
},
new double[][] {
    new double[] { 17.5, 25.5 },
    new double[] { 16.75, 24.75 },
    new double[] { 16, 24 },
    new double[] { 15.5, 23.25 },
    new double[] { 15.25, 23 },
    new double[] { 14.75, 22.25 },
    new double[] { 14.5, 22 },
    new double[] { 14, 21.75 },
    new double[] { 13.75, 21 },
    new double[] { 13, 20.25 },
    new double[] { 12.75, 20.25 },
    new double[] { 12, 19.75 },
    new double[] { 11.75, 19.5 },
    new double[] { 11.5, 19 },
    new double[] { 11.25, 18.75 },
    new double[] { 11, 18.5 },
    new double[] { 11, 18.25 },
    new double[] { 11, 18 },
    new double[] { 11, 17.75 },
    new double[] { 11, 17.5 },
    new double[] { 11, 17 },
    new double[] { 11.25, 16.75 },
    new double[] { 11.5, 16.5 },
    new double[] { 11.75, 16.25 },
    new double[] { 12.25, 16 },
    new double[] { 12.5, 15.75 },
    new double[] { 12.75, 15.25 },
    new double[] { 13.25, 15 },
    new double[] { 14, 14.75 },
    new double[] { 14.25, 14.25 },
    new double[] { 14.75, 14 },
    new double[] { 15, 13.75 },
    new double[] { 15.25, 13.5 },
    new double[] { 15.5, 13.25 },
    new double[] { 15.75, 13 },
    new double[] { 15.75, 12.75 },
    new double[] { 15.75, 12.25 },
    new double[] { 15.5, 11.75 },
    new double[] { 15, 11.5 },
    new double[] { 14.5, 11 },
    new double[] { 14.25, 10.75 },
    new double[] { 13.5, 10.5 },
    new double[] { 13.25, 10.25 },
    new double[] { 13, 9.75 },
    new double[] { 12.75, 9.5 },
    new double[] { 12.25, 9.5 },
    new double[] { 12, 9.25 },
    new double[] { 11.75, 9 },
    new double[] { 11.5, 8.75 },
    new double[] { 11.25, 8.5 },
    new double[] { 11.25, 8.25 },
    new double[] { 11.25, 7.75 },
    new double[] { 11.5, 7.5 },
    new double[] { 11.75, 7.25 },
    new double[] { 12.5, 7 },
    new double[] { 12.75, 6.75 },
    new double[] { 13, 6.25 },
    new double[] { 13.25, 6 },
    new double[] { 13.75, 6 },
    new double[] { 14.25, 5.75 },
    new double[] { 14.5, 5.5 },
    new double[] { 14.75, 5.25 },
    new double[] { 15.25, 4.75 },
    new double[] { 15.5, 4.5 },
    new double[] { 15.75, 4.25 },
    new double[] { 15.75, 4 },
    new double[] { 15.75, 3.75 },
    new double[] { 15.75, 3.5 },
    new double[] { 15.75, 3 },
    new double[] { 15.75, 3 },
    new double[] { 15.75, 2.5 },
    new double[] { 15.75, 2.25 },
    new double[] { 15.5, 2 },
    new double[] { 15, 1.5 },
    new double[] { 14.75, 1.25 },
    new double[] { 14.5, 1 },
    new double[] { 14.25, 0.75 } 
},
new double[][] {
    new double[] { 8.5, 27.25 },
    new double[] { 8.75, 27.25 },
    new double[] { 9, 27.25 },
    new double[] { 9.25, 27.25 },
    new double[] { 10, 27.25 },
    new double[] { 10.25, 26.75 },
    new double[] { 10.5, 26.75 },
    new double[] { 11, 26.5 },
    new double[] { 11.5, 26.5 },
    new double[] { 11.75, 26.5 },
    new double[] { 12.25, 26.25 },
    new double[] { 12.5, 26.25 },
    new double[] { 13, 26.25 },
    new double[] { 13.25, 26.25 },
    new double[] { 13.5, 26 },
    new double[] { 14.25, 25.5 },
    new double[] { 14.5, 25.5 },
    new double[] { 15, 25.25 },
    new double[] { 15.25, 25.25 },
    new double[] { 15.75, 25.25 },
    new double[] { 16, 25 },
    new double[] { 16.25, 25 },
    new double[] { 16.5, 25 },
    new double[] { 16.75, 25 },
    new double[] { 17, 25 },
    new double[] { 17.5, 25 },
    new double[] { 17.75, 25 },
    new double[] { 18, 25 },
    new double[] { 18.25, 24.75 },
    new double[] { 18.5, 24.5 },
    new double[] { 18.75, 24.25 },
    new double[] { 19.25, 23.75 },
    new double[] { 19.5, 23.5 },
    new double[] { 19.5, 23.25 },
    new double[] { 19.5, 23 },
    new double[] { 19.5, 22.75 },
    new double[] { 19.5, 22.5 },
    new double[] { 19.5, 22 },
    new double[] { 19.5, 21.75 },
    new double[] { 19.5, 21.5 },
    new double[] { 19.5, 21.25 },
    new double[] { 19.5, 21 },
    new double[] { 19.5, 20.75 },
    new double[] { 19.5, 20.25 },
    new double[] { 19.5, 20 },
    new double[] { 19, 19.75 },
    new double[] { 18.75, 19.5 },
    new double[] { 18.5, 19.5 },
    new double[] { 18.25, 19.5 },
    new double[] { 18, 19.25 },
    new double[] { 17.75, 19.25 },
    new double[] { 17.25, 19 },
    new double[] { 17, 19 },
    new double[] { 16.75, 19 },
    new double[] { 16.5, 19 },
    new double[] { 16.25, 18.5 },
    new double[] { 16, 18.5 },
    new double[] { 15.5, 18.5 },
    new double[] { 15.25, 18.5 },
    new double[] { 15, 18.5 },
    new double[] { 14.75, 18.25 },
    new double[] { 14.5, 18.25 },
    new double[] { 14.25, 18.25 },
    new double[] { 13.75, 18.25 },
    new double[] { 13.5, 18.25 },
    new double[] { 13.25, 18.25 },
    new double[] { 13, 18.25 },
    new double[] { 12.75, 18 },
    new double[] { 12.5, 18 },
    new double[] { 12, 18 },
    new double[] { 11.75, 18 },
    new double[] { 11.75, 18 },
    new double[] { 11.5, 18 },
    new double[] { 11.25, 18 },
    new double[] { 11, 17.75 },
    new double[] { 10.75, 17.75 },
    new double[] { 10.25, 17.75 },
    new double[] { 10, 17.75 },
    new double[] { 9.75, 17.75 },
    new double[] { 9.5, 17.75 },
    new double[] { 9.25, 17.5 },
    new double[] { 9, 17.5 },
    new double[] { 8.5, 17.5 },
    new double[] { 8.25, 17.5 },
    new double[] { 8, 17.25 },
    new double[] { 7.75, 17.25 },
    new double[] { 7.5, 17.25 },
    new double[] { 7.25, 16.75 },
    new double[] { 6.75, 16.5 },
    new double[] { 6.5, 16.25 },
    new double[] { 6.25, 16 },
    new double[] { 6.25, 15.75 },
    new double[] { 6.25, 15 },
    new double[] { 6.25, 14.75 },
    new double[] { 6.25, 14.5 },
    new double[] { 6.25, 14.25 },
    new double[] { 6.25, 14 },
    new double[] { 6.25, 13.5 },
    new double[] { 6.25, 13.25 },
    new double[] { 6.25, 12.75 },
    new double[] { 6.75, 12.5 },
    new double[] { 6.75, 12 },
    new double[] { 7, 11.75 },
    new double[] { 7.25, 11.5 },
    new double[] { 7.5, 11.25 },
    new double[] { 7.75, 11 },
    new double[] { 8, 10.75 },
    new double[] { 8.5, 10.25 },
    new double[] { 8.75, 10 },
    new double[] { 9, 9.75 },
    new double[] { 9.25, 9.75 },
    new double[] { 9.5, 9.75 },
    new double[] { 9.75, 9.5 },
    new double[] { 10.25, 9.5 },
    new double[] { 10.5, 9.5 },
    new double[] { 10.75, 9.25 },
    new double[] { 11.25, 8.75 },
    new double[] { 11.75, 8.75 },
    new double[] { 12, 8.75 },
    new double[] { 12.25, 8.75 },
    new double[] { 12.5, 8.75 },
    new double[] { 12.75, 8.75 },
    new double[] { 13, 8.75 },
    new double[] { 13.5, 8.75 },
    new double[] { 13.75, 8.75 },
    new double[] { 14, 8.75 },
    new double[] { 14.25, 8.75 },
    new double[] { 14.5, 8.75 },
    new double[] { 14.75, 8.75 },
    new double[] { 15.5, 8.75 },
    new double[] { 15.75, 8.75 },
    new double[] { 16, 8.75 },
    new double[] { 16.25, 8.75 },
    new double[] { 17, 8.5 },
    new double[] { 17.25, 8.5 },
    new double[] { 17.5, 8.5 },
    new double[] { 17.75, 8.5 },
    new double[] { 18.5, 8.25 },
    new double[] { 18.75, 8.25 },
    new double[] { 19.5, 8 },
    new double[] { 19.75, 7.5 },
    new double[] { 20, 7.25 },
    new double[] { 20.25, 7 },
    new double[] { 20.5, 6.75 },
    new double[] { 21, 6.5 },
    new double[] { 21.25, 6.25 },
    new double[] { 21.25, 5.75 },
    new double[] { 21.25, 5.5 },
    new double[] { 21.25, 5.5 },
    new double[] { 21.25, 5.25 },
    new double[] { 21.25, 5 },
    new double[] { 20.75, 4.75 },
    new double[] { 20.5, 4.5 },
    new double[] { 20.25, 3.75 },
    new double[] { 20, 3.5 },
    new double[] { 19.75, 3.25 },
    new double[] { 19.25, 2.5 },
    new double[] { 19, 2.25 },
    new double[] { 18.75, 2 },
    new double[] { 18.75, 1.75 },
    new double[] { 18.5, 1.5 } 
},
new double[][] {
    new double[] { 21.75, 28 },
    new double[] { 21.5, 28 },
    new double[] { 21, 28 },
    new double[] { 20.75, 28 },
    new double[] { 20.5, 28 },
    new double[] { 20, 28 },
    new double[] { 19.5, 28 },
    new double[] { 18.5, 28 },
    new double[] { 18.25, 28 },
    new double[] { 17.75, 28 },
    new double[] { 17, 28 },
    new double[] { 16.5, 28 },
    new double[] { 15.75, 27.75 },
    new double[] { 15, 27.75 },
    new double[] { 14.5, 27.75 },
    new double[] { 13.75, 27.75 },
    new double[] { 13, 27.25 },
    new double[] { 12.75, 27.25 },
    new double[] { 12, 27.25 },
    new double[] { 11.75, 27 },
    new double[] { 11.5, 27 },
    new double[] { 11, 27 },
    new double[] { 10.75, 26.75 },
    new double[] { 10, 26.75 },
    new double[] { 9.75, 26.5 },
    new double[] { 9, 26.5 },
    new double[] { 8.75, 26.5 },
    new double[] { 8.5, 26.25 },
    new double[] { 8.25, 26 },
    new double[] { 7.5, 26 },
    new double[] { 7.25, 25.5 },
    new double[] { 7, 25 },
    new double[] { 7, 24.75 },
    new double[] { 7, 24 },
    new double[] { 7.25, 23.75 },
    new double[] { 7.25, 23.5 },
    new double[] { 7.75, 23.25 },
    new double[] { 8, 22.75 },
    new double[] { 8.25, 22.5 },
    new double[] { 8.5, 22.25 },
    new double[] { 8.75, 22 },
    new double[] { 9.5, 21.25 },
    new double[] { 9.75, 21 },
    new double[] { 10, 20.75 },
    new double[] { 10.25, 20.75 },
    new double[] { 11, 20.5 },
    new double[] { 12, 20 },
    new double[] { 12.75, 20 },
    new double[] { 13, 20 },
    new double[] { 13.25, 20 },
    new double[] { 13.75, 19.75 },
    new double[] { 14, 19.75 },
    new double[] { 14.25, 19.75 },
    new double[] { 14.5, 19.75 },
    new double[] { 14.75, 19.75 },
    new double[] { 15, 19.75 },
    new double[] { 15.5, 19.75 },
    new double[] { 15.75, 19.75 },
    new double[] { 16, 19.75 },
    new double[] { 16.25, 19.75 },
    new double[] { 17, 19.75 },
    new double[] { 17.25, 19.75 },
    new double[] { 17.5, 19.75 },
    new double[] { 18, 19.5 },
    new double[] { 18.5, 19.5 },
    new double[] { 18.75, 19.5 },
    new double[] { 19, 19.5 },
    new double[] { 19.5, 19.25 },
    new double[] { 20.25, 18.75 },
    new double[] { 20.5, 18.75 },
    new double[] { 21, 18.75 },
    new double[] { 21.5, 18.5 },
    new double[] { 21.75, 18.25 },
    new double[] { 22.5, 17.75 },
    new double[] { 22.75, 17.5 },
    new double[] { 23, 17.25 },
    new double[] { 23.25, 17 },
    new double[] { 23.25, 16.75 },
    new double[] { 23.25, 16.5 },
    new double[] { 23.25, 16 },
    new double[] { 23.25, 15.75 },
    new double[] { 23.25, 15.5 },
    new double[] { 23.25, 15.25 },
    new double[] { 23.25, 15 },
    new double[] { 23.25, 14.75 },
    new double[] { 23.25, 14.25 },
    new double[] { 23.25, 14 },
    new double[] { 23, 13.5 },
    new double[] { 22.75, 13.25 },
    new double[] { 22.75, 12.75 },
    new double[] { 22.25, 12.25 },
    new double[] { 22, 12 },
    new double[] { 21.75, 11.5 },
    new double[] { 21.5, 11.25 },
    new double[] { 21.25, 11.25 },
    new double[] { 21, 11 },
    new double[] { 20.75, 10.75 },
    new double[] { 20.25, 10.75 },
    new double[] { 20, 10.75 },
    new double[] { 19.75, 10.75 },
    new double[] { 19.5, 10.75 },
    new double[] { 19.25, 10.5 },
    new double[] { 19, 10.5 },
    new double[] { 18.5, 10.5 },
    new double[] { 18.25, 10.25 },
    new double[] { 18, 10.25 },
    new double[] { 17.75, 10.25 },
    new double[] { 17, 10.25 },
    new double[] { 16.75, 10.25 },
    new double[] { 16.25, 10.25 },
    new double[] { 16, 10.25 },
    new double[] { 15.5, 10.25 },
    new double[] { 15.5, 10.25 },
    new double[] { 15, 10.25 },
    new double[] { 14.75, 10.25 },
    new double[] { 14, 9.75 },
    new double[] { 13.5, 9.75 },
    new double[] { 13, 9.5 },
    new double[] { 12.75, 9.5 },
    new double[] { 12.25, 9.25 },
    new double[] { 12, 9.25 },
    new double[] { 11.5, 9 },
    new double[] { 11.25, 9 },
    new double[] { 11, 8.75 },
    new double[] { 10.75, 8.25 },
    new double[] { 10, 8 },
    new double[] { 9.75, 7.75 },
    new double[] { 9.5, 7.5 },
    new double[] { 9.25, 7.5 },
    new double[] { 9, 7.25 },
    new double[] { 8.25, 6.75 },
    new double[] { 8, 6.5 },
    new double[] { 7.75, 6.25 },
    new double[] { 7.75, 6 },
    new double[] { 7.5, 5.75 },
    new double[] { 7.5, 5.5 },
    new double[] { 7.5, 5 },
    new double[] { 7.5, 4.75 },
    new double[] { 7.5, 4.25 },
    new double[] { 7.5, 4 },
    new double[] { 7.5, 3.5 },
    new double[] { 7.75, 3.25 },
    new double[] { 8, 3 },
    new double[] { 8.25, 2.75 },
    new double[] { 8.5, 2.5 },
    new double[] { 9, 2.25 },
    new double[] { 9.25, 1.75 } 
},
new double[][] {
    new double[] { 10.25, 27.25 },
    new double[] { 10.5, 27 },
    new double[] { 10.75, 27 },
    new double[] { 11, 26.5 },
    new double[] { 11.25, 26.5 },
    new double[] { 11.5, 26.25 },
    new double[] { 12, 26.25 },
    new double[] { 12.25, 26 },
    new double[] { 12.5, 26 },
    new double[] { 12.75, 26 },
    new double[] { 13.5, 25.75 },
    new double[] { 13.75, 25.5 },
    new double[] { 14, 25.5 },
    new double[] { 14.25, 25.25 },
    new double[] { 14.5, 24.75 },
    new double[] { 15.25, 24.5 },
    new double[] { 15.5, 24.25 },
    new double[] { 15.75, 24 },
    new double[] { 16, 24 },
    new double[] { 16.5, 23.75 },
    new double[] { 16.75, 23.25 },
    new double[] { 17, 23.25 },
    new double[] { 17.25, 23 },
    new double[] { 17.5, 23 },
    new double[] { 18.25, 22.75 },
    new double[] { 18.5, 22.5 },
    new double[] { 18.5, 22.25 },
    new double[] { 18.5, 21.75 },
    new double[] { 18.5, 21.5 },
    new double[] { 18.5, 21.25 },
    new double[] { 18.5, 21 },
    new double[] { 18.5, 20.75 },
    new double[] { 18.25, 20.5 },
    new double[] { 17.75, 20 },
    new double[] { 17.5, 19.75 },
    new double[] { 17.25, 19.5 },
    new double[] { 17, 19.25 },
    new double[] { 17, 19 },
    new double[] { 17, 18.75 },
    new double[] { 16.75, 18 },
    new double[] { 16.5, 18 },
    new double[] { 16, 18 },
    new double[] { 15.75, 17.75 },
    new double[] { 15.5, 17.75 },
    new double[] { 15.25, 17.75 },
    new double[] { 15, 17.5 },
    new double[] { 14.75, 17.5 },
    new double[] { 14.25, 17.5 },
    new double[] { 14, 17.5 },
    new double[] { 13.75, 17.5 },
    new double[] { 13.5, 17.5 },
    new double[] { 13.25, 17.5 },
    new double[] { 13, 17.5 },
    new double[] { 12.5, 17.5 },
    new double[] { 12.25, 17.5 },
    new double[] { 12, 17.5 },
    new double[] { 11.75, 17.5 },
    new double[] { 11.5, 17.5 },
    new double[] { 10.75, 17 },
    new double[] { 10.5, 16.75 },
    new double[] { 10.25, 16.75 },
    new double[] { 10, 16.75 },
    new double[] { 9.5, 16.75 },
    new double[] { 9.25, 16.5 },
    new double[] { 9, 16.5 },
    new double[] { 8.75, 16.5 },
    new double[] { 8.5, 16.25 },
    new double[] { 7.75, 16 },
    new double[] { 7.5, 15.75 },
    new double[] { 7.25, 15.75 },
    new double[] { 7, 15.25 },
    new double[] { 6.75, 15 },
    new double[] { 6.75, 15 },
    new double[] { 6.25, 15 },
    new double[] { 6, 14.75 },
    new double[] { 5.75, 14.5 },
    new double[] { 5.75, 14.25 },
    new double[] { 5.75, 14 },
    new double[] { 5.75, 13.5 },
    new double[] { 5.75, 13.25 },
    new double[] { 5.75, 12.75 },
    new double[] { 5.75, 12.5 },
    new double[] { 6, 12 },
    new double[] { 6, 11.75 },
    new double[] { 6.5, 11.5 },
    new double[] { 6.75, 11.25 },
    new double[] { 7, 11 },
    new double[] { 7.25, 10.75 },
    new double[] { 7.5, 10.25 },
    new double[] { 8.25, 10 },
    new double[] { 8.5, 10 },
    new double[] { 9.25, 9.75 },
    new double[] { 9.5, 9.75 },
    new double[] { 9.75, 9.75 },
    new double[] { 10.25, 9.75 },
    new double[] { 11, 9.75 },
    new double[] { 11.25, 9.75 },
    new double[] { 11.5, 9.75 },
    new double[] { 12.25, 9.75 },
    new double[] { 12.5, 9.75 },
    new double[] { 13, 9.75 },
    new double[] { 13.5, 9.75 },
    new double[] { 13.75, 9.75 },
    new double[] { 14, 9.75 },
    new double[] { 14.25, 9.75 },
    new double[] { 14.5, 9.75 },
    new double[] { 14.75, 9.75 },
    new double[] { 15.25, 9.75 },
    new double[] { 15.75, 9.75 },
    new double[] { 16, 9.5 },
    new double[] { 16.25, 9.5 },
    new double[] { 17, 9.5 },
    new double[] { 17.25, 9.25 },
    new double[] { 17.5, 9.25 },
    new double[] { 17.75, 9.25 },
    new double[] { 18.25, 8.75 },
    new double[] { 18.5, 8.75 },
    new double[] { 18.75, 8.75 },
    new double[] { 19, 8.75 },
    new double[] { 19.25, 8.5 },
    new double[] { 19.5, 8.25 },
    new double[] { 20, 8 },
    new double[] { 20.25, 7.75 },
    new double[] { 20.5, 7.5 },
    new double[] { 20.75, 7 },
    new double[] { 21, 6.75 },
    new double[] { 21, 6.5 },
    new double[] { 21, 6.25 },
    new double[] { 21, 6 },
    new double[] { 21, 5.75 },
    new double[] { 21, 5.25 },
    new double[] { 20.75, 5 },
    new double[] { 20.5, 4.5 },
    new double[] { 20, 4 },
    new double[] { 19.75, 3.75 },
    new double[] { 19.5, 3.5 },
    new double[] { 19.25, 3.25 },
    new double[] { 19, 3 },
    new double[] { 18.75, 2.75 },
    new double[] { 18.25, 2.25 },
    new double[] { 18, 2 },
    new double[] { 17.75, 1.75 },
    new double[] { 17.5, 1.75 },
    new double[] { 17.25, 1.5 },
    new double[] { 17, 1.5 },
    new double[] { 16.5, 1.25 },
    new double[] { 16.25, 1.25 },
    new double[] { 16, 1.25 } 
},
new double[][] {
    new double[] { 19.5, 27.75 },
    new double[] { 19.25, 27.75 },
    new double[] { 18.75, 27.75 },
    new double[] { 18.5, 27.75 },
    new double[] { 18.25, 27.75 },
    new double[] { 18, 27.75 },
    new double[] { 17.75, 27.75 },
    new double[] { 17.5, 27.75 },
    new double[] { 16.75, 27.5 },
    new double[] { 16.5, 27.5 },
    new double[] { 16.25, 27.5 },
    new double[] { 15.5, 27.5 },
    new double[] { 14.75, 27 },
    new double[] { 14.25, 27 },
    new double[] { 13.5, 27 },
    new double[] { 12.75, 26.75 },
    new double[] { 12.5, 26.75 },
    new double[] { 12, 26.75 },
    new double[] { 11.25, 26.25 },
    new double[] { 10.5, 26 },
    new double[] { 10.25, 26 },
    new double[] { 9.5, 25.25 },
    new double[] { 9.25, 25.25 },
    new double[] { 9, 25.25 },
    new double[] { 8.75, 25.25 },
    new double[] { 8.5, 25 },
    new double[] { 8.25, 24.75 },
    new double[] { 7.75, 24.5 },
    new double[] { 7.5, 24.25 },
    new double[] { 7.25, 24 },
    new double[] { 7.25, 23.5 },
    new double[] { 7, 23.25 },
    new double[] { 7, 23 },
    new double[] { 7, 22.75 },
    new double[] { 7, 22.5 },
    new double[] { 7, 21.75 },
    new double[] { 7, 21.25 },
    new double[] { 7.5, 20.75 },
    new double[] { 7.75, 20.5 },
    new double[] { 8, 20.25 },
    new double[] { 8.5, 19.5 },
    new double[] { 9.25, 18.75 },
    new double[] { 9.75, 18.5 },
    new double[] { 10.25, 18.25 },
    new double[] { 10.5, 18 },
    new double[] { 10.75, 18 },
    new double[] { 11.25, 18 },
    new double[] { 11.75, 17.75 },
    new double[] { 12, 17.75 },
    new double[] { 12.25, 17.75 },
    new double[] { 12.75, 17.75 },
    new double[] { 13, 17.75 },
    new double[] { 13.5, 17.75 },
    new double[] { 13.75, 17.75 },
    new double[] { 14.25, 17.75 },
    new double[] { 14.5, 17.75 },
    new double[] { 15, 17.75 },
    new double[] { 15.25, 17.75 },
    new double[] { 16, 17.75 },
    new double[] { 16.25, 17.75 },
    new double[] { 16.5, 17.75 },
    new double[] { 16.75, 17.75 },
    new double[] { 17.25, 17.75 },
    new double[] { 17.5, 17.75 },
    new double[] { 17.75, 17.75 },
    new double[] { 18, 17.75 },
    new double[] { 18.25, 17.75 },
    new double[] { 19, 17.25 },
    new double[] { 19, 17.25 },
    new double[] { 19.25, 17.25 },
    new double[] { 19.5, 17.25 },
    new double[] { 19.75, 17.25 },
    new double[] { 20, 17 },
    new double[] { 20.5, 16.75 },
    new double[] { 21, 16.5 },
    new double[] { 21.25, 16.25 },
    new double[] { 21.75, 15.75 },
    new double[] { 22, 15.5 },
    new double[] { 22.25, 15 },
    new double[] { 22.25, 14.5 },
    new double[] { 22.25, 14.25 },
    new double[] { 22.25, 14 },
    new double[] { 22.25, 13.75 },
    new double[] { 22.25, 13.5 },
    new double[] { 22.25, 13.25 },
    new double[] { 22.25, 12.75 },
    new double[] { 22.25, 12.5 },
    new double[] { 22.25, 12.25 },
    new double[] { 22, 12 },
    new double[] { 21.5, 11.75 },
    new double[] { 21.25, 11.5 },
    new double[] { 21, 11 },
    new double[] { 20.75, 11 },
    new double[] { 20.5, 11 },
    new double[] { 20.25, 10.75 },
    new double[] { 19.75, 10.75 },
    new double[] { 19.25, 10.75 },
    new double[] { 18.5, 10.75 },
    new double[] { 18.25, 10.75 },
    new double[] { 18, 10.75 },
    new double[] { 17.75, 10.5 },
    new double[] { 17.5, 10.5 },
    new double[] { 17.25, 10.5 },
    new double[] { 16.75, 10.5 },
    new double[] { 16.5, 10.5 },
    new double[] { 16.25, 10.5 },
    new double[] { 15.75, 10.5 },
    new double[] { 15.25, 10.5 },
    new double[] { 15, 10.5 },
    new double[] { 14.75, 10.5 },
    new double[] { 14.5, 10.5 },
    new double[] { 14.25, 10.5 },
    new double[] { 14, 10.25 },
    new double[] { 13.5, 10.25 },
    new double[] { 13.25, 10.25 },
    new double[] { 13, 10.25 },
    new double[] { 12.75, 10 },
    new double[] { 12.5, 10 },
    new double[] { 12.25, 9.75 },
    new double[] { 11.75, 9.75 },
    new double[] { 11.5, 9.75 },
    new double[] { 11.25, 9.25 },
    new double[] { 11, 9 },
    new double[] { 10.75, 9 },
    new double[] { 10.5, 8.75 },
    new double[] { 10, 8.5 },
    new double[] { 9.75, 8.25 },
    new double[] { 9.75, 8 },
    new double[] { 9.75, 7.75 },
    new double[] { 9.75, 7.25 },
    new double[] { 9.75, 7 },
    new double[] { 9.75, 6.75 },
    new double[] { 9.75, 6.5 },
    new double[] { 9.75, 6.25 },
    new double[] { 10.25, 6 },
    new double[] { 10.5, 5.5 },
    new double[] { 10.75, 5.25 },
    new double[] { 11, 5 },
    new double[] { 11.25, 4.75 },
    new double[] { 11.5, 4.5 },
    new double[] { 12, 4.25 },
    new double[] { 12.25, 3.75 },
    new double[] { 12.5, 3.5 },
    new double[] { 12.75, 3.25 },
    new double[] { 13.5, 3.25 },
    new double[] { 13.75, 3 },
    new double[] { 14, 3 },
    new double[] { 14.25, 2.75 },
    new double[] { 15, 2.25 },
    new double[] { 15.25, 2 },
    new double[] { 15.75, 1.75 } 
},
new double[][] {
    new double[] { 10.25, 28 },
    new double[] { 11, 28 },
    new double[] { 11.25, 28 },
    new double[] { 11.75, 28 },
    new double[] { 12, 28 },
    new double[] { 12.5, 28 },
    new double[] { 12.75, 28 },
    new double[] { 13, 27.75 },
    new double[] { 13.5, 27.75 },
    new double[] { 14, 27.75 },
    new double[] { 14.5, 27.5 },
    new double[] { 15.25, 27 },
    new double[] { 15.5, 27 },
    new double[] { 15.75, 27 },
    new double[] { 16, 27 },
    new double[] { 16.75, 26.75 },
    new double[] { 17, 26.75 },
    new double[] { 17.25, 26.5 },
    new double[] { 18, 26.25 },
    new double[] { 18.25, 26.25 },
    new double[] { 18.5, 25.75 },
    new double[] { 18.75, 25.75 },
    new double[] { 19.25, 25.5 },
    new double[] { 19.5, 25.25 },
    new double[] { 19.5, 25 },
    new double[] { 19.5, 24.75 },
    new double[] { 19.5, 24.5 },
    new double[] { 19.5, 24 },
    new double[] { 19.5, 23.75 },
    new double[] { 19.5, 23.5 },
    new double[] { 19.5, 23.25 },
    new double[] { 19.5, 23 },
    new double[] { 19.5, 22.75 },
    new double[] { 19, 22 },
    new double[] { 18.75, 21.75 },
    new double[] { 18.5, 21.5 },
    new double[] { 18.25, 21.25 },
    new double[] { 18, 20.75 },
    new double[] { 17.5, 20.5 },
    new double[] { 17.25, 20.25 },
    new double[] { 17, 20 },
    new double[] { 16.5, 20 },
    new double[] { 15.75, 19.5 },
    new double[] { 15.5, 19.5 },
    new double[] { 15.25, 19.5 },
    new double[] { 14.75, 19.25 },
    new double[] { 14.5, 19.25 },
    new double[] { 14, 19.25 },
    new double[] { 13.75, 19.25 },
    new double[] { 13, 19 },
    new double[] { 12.75, 19 },
    new double[] { 12.5, 19 },
    new double[] { 11.75, 18.25 },
    new double[] { 11.5, 18.25 },
    new double[] { 10.75, 18 },
    new double[] { 10.25, 17.75 },
    new double[] { 9.5, 17.75 },
    new double[] { 9.25, 17.5 },
    new double[] { 9, 17 },
    new double[] { 8.5, 16.75 },
    new double[] { 8.25, 16.5 },
    new double[] { 8, 16.25 },
    new double[] { 8, 16 },
    new double[] { 8, 15.75 },
    new double[] { 8, 15 },
    new double[] { 8, 14.25 },
    new double[] { 8.5, 14 },
    new double[] { 8.75, 13.75 },
    new double[] { 9, 13.5 },
    new double[] { 9.25, 13.25 },
    new double[] { 10.25, 12.5 },
    new double[] { 11.5, 12 },
    new double[] { 11.75, 12 },
    new double[] { 12.25, 12 },
    new double[] { 13, 11.75 },
    new double[] { 13.75, 11.75 },
    new double[] { 14, 11.75 },
    new double[] { 14.5, 11.75 },
    new double[] { 15, 11.75 },
    new double[] { 15.5, 11.75 },
    new double[] { 16.25, 11.5 },
    new double[] { 16.5, 11.5 },
    new double[] { 16.75, 11.5 },
    new double[] { 17.5, 11 },
    new double[] { 17.75, 10.75 },
    new double[] { 18, 10.75 },
    new double[] { 18.25, 10.5 },
    new double[] { 18.5, 10.25 },
    new double[] { 19, 10 },
    new double[] { 19.5, 9.25 },
    new double[] { 19.5, 9.25 },
    new double[] { 19.5, 9 },
    new double[] { 19.5, 8.75 },
    new double[] { 19.5, 8.5 },
    new double[] { 19.25, 8 },
    new double[] { 19.25, 7.75 },
    new double[] { 19, 7.25 },
    new double[] { 18.5, 6.75 },
    new double[] { 18.25, 6.5 },
    new double[] { 18, 6.25 },
    new double[] { 17.75, 6 },
    new double[] { 17.5, 5.75 },
    new double[] { 17.25, 5.5 },
    new double[] { 16.75, 5.5 },
    new double[] { 16.5, 5.25 },
    new double[] { 16.25, 4.75 },
    new double[] { 15.75, 4.5 },
    new double[] { 15.25, 4.25 },
    new double[] { 15, 4 },
    new double[] { 14.5, 3.5 },
    new double[] { 14, 3.5 },
    new double[] { 13.75, 3.25 } 
    },
#endregion
        };

        public static int[] outputTest =
        {
            0, 0, 0, 0, 0, 1, 1, 1, 1, 
            1, 1, 1, 1, 1, 0, 0, 0, 0,
            2, 2, 2, 2, 2, 2, 3, 3, 3,
            3, 3, 4, 4, 4, 4, 4, 5, 5,
            5, 5, 5
        };

    }
}
